{"id":5331,"date":"2023-11-18T09:52:13","date_gmt":"2023-11-18T08:52:13","guid":{"rendered":"https:\/\/msxitalia.org\/?p=5331"},"modified":"2023-12-02T08:59:25","modified_gmt":"2023-12-02T07:59:25","slug":"turbo-pascal-msx-lezione-2","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/turbo-pascal-msx-lezione-2\/","title":{"rendered":"Turbo Pascal MSX \u2013 lesson 2"},"content":{"rendered":"<p><img decoding=\"async\" data-src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/11\/391546101_246108101769806_3942388225111598940_n-150x150.jpg\" class=\"size-thumbnail wp-image-5212 aligncenter lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" width=\"150\" height=\"150\" \/><noscript><img decoding=\"async\" class=\"size-thumbnail wp-image-5212 aligncenter\" src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/11\/391546101_246108101769806_3942388225111598940_n-150x150.jpg\" alt=\"\" width=\"150\" height=\"150\"><\/noscript><\/p>\n<h1 style=\"text-align: center\">MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 2)<\/h1>\n<h2>Capitolo 2<\/h2>\n<h3>Introduzione al linguaggio Turbo Pascal<\/h3>\n<p>Vedremo ora come \u00e8 strutturato un programma in Turbo Pascal. Non \u00e8 necessario comprendere tutto in questo momento, stiamo solo vedendo la struttura tipica di un programma:<br \/>\nUn programma in Turbo Pascal comincia sempre con la parola riservata \u201cprogram\u201d seguita dal nome del programma, e ogni riga (tranne alcune eccezioni) finisce sempre con un punto e virgola. Vediamo un esempio:<\/p>\n<pre style=\"padding-left: 40px\">program nome_del_programma;\r\n{Questo \u00e8 un commento}\r\n{in questa sezione si dichiarano le etichette (label), le costanti (const), i tipi definiti dall\u2019utente (type), le variabili (var), le procedure e le funzioni. Tutti gli oggetti che saranno usati nel programma, devono essere dichiarati prima dell\u2019uso}\r\nVar {dichiarazione variabili}\r\nX,y : integer;\r\nstr : string[30];\r\npg: real;\r\n\r\n<\/pre>\n<pre style=\"padding-left: 40px\">procedure Cls; {dichiarazione di procedura}\r\n{dichiarazioni, come per il programma principale}\r\nbegin {inizio procedura}\r\nclrscr; {istruzioni}\r\nend; {fine procedura}\r\n\r\n<\/pre>\n<pre style=\"padding-left: 40px\">function Cls (param_1:tipo1,var param_2:tipo2,..param_n:tipon):tipo_restituito ; {dichiarazione di funzione}\r\n{dichiarazioni, come per il programma principale}\r\nbegin {inizio funzione}\r\nCls := valore; {istruzioni della funzione}\r\nend; {fine della funzione}\r\n\r\n<\/pre>\n<pre style=\"padding-left: 40px\">begin {inizio del programma\r\nistruzioni del programma; {codice}\r\nend. {fine del programma}<\/pre>\n<p>Visto cos\u00ec sembra complicato, ma in effetti non le \u00e8. Vediamo un esempio reale e poi scriviamo lo stesso programma in MSX Basic.<\/p>\n<pre style=\"padding-left: 40px\">Program potenza;\r\nvar x,y:integer; \r\nbegin \r\nclrscr; \r\nwriteln('Immetti il numero da elevare al quadrato');\r\nreadln(x);\r\ny:=x*x;\r\nwriteln('il quadrato di ',x,' e'' ',y);\r\nend.<\/pre>\n<p>La prima riga \u00e8 l\u2019intestazione del programma ed \u00e8 obbligatoria. Le variabili x e y sono di tipo integer e, sono dichiarate prima del loro utilizzo. Il programma inizia sempre con la parola chiave begin e termina con la parola chiave end. seguita dal punto. Le istruzioni comprese tra begin e end formano il corpo del programma (per chi conosce il C, begin ed end hanno la stessa funzione delle parentesi { } graffe ). Gruppi di istruzioni coerenti tra loro vanno rinchiuse tra begin e end; in questo caso, per\u00f2, end \u00e8 seguito dal punto e virgola(;), perch\u00e8 il punto (.) indica la fine del programma. Nella definizione di subroutines, procedure e funzioni definite dall\u2019utente, si segue esattamente lo stesso schema, l\u2019unica differenza \u00e8 che la definizione di una subroutine termina sempre con end e il punto e virgola. Ma vediamo ora lo stesso programma scritto in Basic MSX:<\/p>\n<pre style=\"padding-left: 40px\">10 CLS\r\n20 PRINT \u201cImmetti il numero da elevare al quadrato\u201d\r\n25 INPUT X\r\n30 Y=X*X\r\n50 PRINT \u201cil quadrato di X \u00e8 \u201d; Y\r\n60 END<\/pre>\n<p>L\u2019equivalente in basic \u00e8 certamente pi\u00f9 compatto, ma il Turbo Pascal, per esempio nella definizione dei sottoprogrammi offre una versatilit\u00e0 maggiore, una procedure, o una function infatti, hanno la stessa struttura di un programma, quindi possono avere accesso a dati propri, definire tipi propri, definire al proprio interno altre procedure e funzioni, restituire valori al programma principale. Riscriviamo lo stesso programma utilizzando una funzione. In questo caso implementiamo l\u2019operazione di elevamento al quadrato che viene realizzata da una funzione, alla quale passiamo come parametro il numero da elevare al quadrato e che restituisce il valore della potenza. Vediamo un esempio:<\/p>\n<pre style=\"padding-left: 40px\">Program potenza;\r\nvar x,y:integer;\r\n{qui definiamo la funzione}\r\nfunction quadrato(numero : integer): integer; \r\nbegin\r\nquadrato:= numero * numero;\r\nend;\r\n{da qui inizia il programma principale}\r\nbegin\r\nclrscr;\r\nwriteln('Immetti il numero da elevare al quadrato');\r\nreadln(x);\r\ny:=quadrato (x);\r\nwriteln('il quadrato di ',x,' e'' ',y);\r\n{oppure si pu\u00f2 inserire direttamente la chiamata alla funzione in un\u2019espressione}\r\nwriteln('il quadrato di ',x,' e'' ',quadrato(x));\r\nend.<\/pre>\n<p>Lo stesso programma in basic sarebbe il seguente<\/p>\n<pre style=\"padding-left: 40px\">10 CLS\r\n20 DEF FN QUADRATO (X)=X^2 \r\n30 INPUT \u201cImmetti il numero da elevare al quadrato\u201d, X\r\n40 Y=FN QUADRATO(X)\r\n50 PRINT \u201cil quadrato di X \u00e8 \u201d; Y\r\n55 REM OPPURE\r\n60 PRINT \u201cil quadrato di X \u00e8 \u201d; FN QUADRATO(X)\r\n70 END<\/pre>\n<p>&nbsp;<\/p>\n<p>Come si vede, in Turbo Pascal la definizione di una funzione segue lo stesso schema della definizione del programma<br \/>\nFunction nome_della_funzione (parametri da passare alla funzione): tipo restituito<br \/>\nBegin<br \/>\nIstruzioni della funzione<br \/>\nEnd;<br \/>\nIn questo caso la definizione della funzione \u00e8 la seguente:<\/p>\n<pre style=\"padding-left: 40px\">function quadrato(numero : integer): integer; \r\nbegin \r\nquadrato:= numero * numero;\r\nend;<\/pre>\n<p>Naturalmente possiamo migliorare la funzione in modo che prenda in input due numeri , base ed esponente, e che restituisca il valore di base elevato esponente. Per esempio<\/p>\n<pre style=\"padding-left: 40px\">function potenza(base real, esponente:real): real; \r\nvar \r\ni: integr;\r\nr: real;\r\nbegin \r\nr:=1;\r\nfor i := 1 to abs(trunc(esponente)) do\r\nr := r * base;\r\npotenza:=r; \r\nend;<\/pre>\n<p>dunque all\u2019interno di un programma possiamo usare per esempio l\u2019istruzione<\/p>\n<pre style=\"padding-left: 40px\">x:=3;\r\ny:=4;\r\nk:= potenza (x,y);<\/pre>\n<p>e utilizzare il valore di K (ovvero 3 elevato 4) dove K avr\u00e0 valore 81.<br \/>\nLa funzione assegna alla variabile base il valore del primo parametro (x) e alla variabile esponenente il valore del secondo parametro (Y). Dopo i calcoli assegna alla funzione potenza il valore calcolato e lo restituisce all\u2019espressione chiamante (in questo caso a k).<br \/>\nNaturalmente, la funzione pu\u00f2 essere migliorata, per esempio mancano i controlli per i casi particolari di esponente = 0 o esponente negativo.<\/p>\n<p>In ogni caso, torneremo sulle funzioni e sulle procedure in un capitolo dedicato. Intendevo solo presentare la struttura di un programma in Turbo Pascal e mostrarne le potenzialit\u00e0. Naturalmente c\u2019\u00e8 molto di pi\u00f9!<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 2) Capitolo 2 Introduzione al linguaggio Turbo Pascal Vedremo ora come \u00e8 strutturato un programma in Turbo Pascal. Non \u00e8 necessario comprendere tutto in questo momento, stiamo solo vedendo la struttura tipica di un programma: Un programma in Turbo Pascal comincia sempre con la parola [&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-5331","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\/5331","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=5331"}],"version-history":[{"count":3,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5331\/revisions"}],"predecessor-version":[{"id":5731,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/5331\/revisions\/5731"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=5331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=5331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=5331"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=5331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}