{"id":6373,"date":"2023-12-30T22:33:00","date_gmt":"2023-12-30T21:33:00","guid":{"rendered":"https:\/\/msxitalia.org\/?p=6373"},"modified":"2023-12-30T22:38:32","modified_gmt":"2023-12-30T21:38:32","slug":"6373-2","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/6373-2\/","title":{"rendered":"Turbo Pascal MSX \u2013 Lesson 6"},"content":{"rendered":"\r\n<figure class=\"wp-block-image aligncenter is-resized\"><img decoding=\"async\" width=\"1269\" height=\"1053\" data-src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1.jpg\" class=\"wp-image-6376 aligncenter lazyload\" style=\"width: 162px;height: 134px\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" \/><noscript><img decoding=\"async\" width=\"1269\" height=\"1053\" class=\"wp-image-6376 aligncenter\" style=\"width: 162px;height: 134px\" src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1.jpg\" alt=\"\" srcset=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1.jpg 1269w, https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1-980x813.jpg 980w, https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1-480x398.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1269px, 100vw\" \/><\/noscript><\/figure>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\">MSX Turbo Pascal Rubrica a cura di Stefano Roperto<\/h1>\r\n<h1 class=\"wp-block-heading\" style=\"text-align: center\">(parte 6)<\/h1>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Capitolo 6<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">PROCEDURE E FUNZIONI<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Turbo Pascal, come abbiamo visto nel capitolo 4 fornisce al programmatore una completa collezione di procedure e funzioni che rendono il linguaggio moderno e completo. In questo capitolo vedremo le pi\u00f9 importanti. Non \u00e8 necessario spiegarle tutte in quanto molte sono comuni alle funzioni presenti in \u00a0altri linguaggi, compreso MSX basic, e altre sono di immediata comprensione. Il Turbo Pascal fornisce procedure e funzioni per:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Manipolazione di stringhe<\/li>\r\n\r\n\r\n\r\n<li>Gestione dei files<\/li>\r\n\r\n\r\n\r\n<li>Allocazione di variabili, puntatori e gestione della memoria<\/li>\r\n\r\n\r\n\r\n<li>Input e output di dati<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">In aggiunta a ci\u00f2 abbiamo a disposizione funzioni\u00a0 e procedure di carattere generale.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cominciamo con le funzioni aritmetiche :<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Abs<\/strong>(num) dove num \u00e8 un integer o un real del quale si chiede di restituire il valore assoluto che sar\u00e0 dello stesso tipo di num<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Arctan<\/strong>(num) restituisce l\u2019angolo in radianti di cui la tangente \u00e8 num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Cos<\/strong>(num)\u00a0 restituisce il coseno di num. Num \u00e8 espresso in radianti e pu\u00f2 essere real o integer. Il valore restituito \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Exp<\/strong>(num)\u00a0 restituisce l\u2019esponenziale di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Frac<\/strong>(num)\u00a0 restituisce la parte frazionaria di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Int<\/strong>(num)\u00a0 restituisce la parte intera di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Ln<\/strong>(num) restituisce il logaritmo naturale di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Sin<\/strong>(num) restituisce il seno di num. Num \u00e8 espresso in radianti \u00e8 pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Sqr<\/strong>(num) restituisce il quadrato di num Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Sqrt<\/strong>(num) restituisce la radice quadrata di num Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Per i tipi scalari abbiamo a disposizioni alcune Funzioni:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Pred<\/strong>(num) restituisce il predecessore di num in un a variabile di tipo scalare<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Succ<\/strong>(num) restituisce il successore di num in un a variabile di tipo scalare<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Odd<\/strong>(num) restituisce true se num \u00e8 dispari e false se num \u00e8 pari. Num deve essere un integer<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ci sono poi le cosiddette Funzioni di conversione:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Chr<\/strong>(num) restituisce il carattere il cui codice ascii \u00e8 indicato da num<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Ord<\/strong>(var) restituisce l\u2019ordinale del valore var in un set definito dal tipo var. var pu\u00f2 essere un qaulsiasi tipo scalare, eccetto real, e il risultato \u00e8 di tipo integer<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Round<\/strong>(num) restituisce il valore num arrotondato al valore intero pi\u00f9 vicino. Num deve essere un real e viene restituito un integer<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Trunc<\/strong>(num) restituisce l\u2019intero maggiore (se num &gt;=0) o il minore (se num &gt;0). Num deve essere un real e viene restituito un integer<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E infine le funzioni di uso generale generale:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Hi<\/strong>(num) restituisce il byte alto del valore intero num<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>KeyPressed<\/strong>(num) restituisce true se \u00e8 premuto un taso o false se non \u00e8 premuto alcun tasto<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Lo<\/strong>(num) restituisce il byte basso del valore intero num<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Random<\/strong> restituisce un numero casuale &gt;= 0 &lt;1<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Random<\/strong>(num) restituisce un numero casuale &gt;= 0 &lt;num. Num deve essere un integer<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>ParamCount<\/strong> restituisce il numero integer di parametri passati al programma sulla linea di comando separati da spazio o tab<\/p>\r\n<p><strong>ParamStr<\/strong>(N) restituisce\u00a0 l\u2019eNessimo parametro dalla linea di comando e non pu\u00f2 essere maggiore di ParamCount. ParamStr(0) restituisce il nome del programma<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>SizeOf<\/strong>(nome) restituisce un integer che indica il numero di bytes occupati in memoria dalla variabile o dal tipo name<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Swap<\/strong>(num) scambia i byte di ordine alto e basso del valore integer num<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>UpCase<\/strong>(chr) restituisce l\u2019equivalente maiuscolo del carattere chr. Se non esiste, non viene modificato nessun valore<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Turbo Pascal fornisce un set completo di funzioni e\u00a0 procedure dedicate alla gestione delle stringhe. Il tipo string e il tipo char sono compatibili tra loro , di fatto Le stringhe in Turbo Pascal sono un tipo di dato derivato dal tipo char, tecnicamente il tipo string \u00e8 simile ad un array di caratteri come si evince dalla sua definizione in questo esempio, con la differenza che l\u2019elemento di indice 0 contiene la lunghezza dell\u2019array stesso:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">type<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nome = string[50] ;{i caratteri vanno dall\u2019elemento 1 all\u2019elemento 50, mentre l\u2019elemento 0 contiene il valore 50, per cui in memoria la stringa nome occuper\u00e0 51 bytes. Il limite della lunghezza di un a variabile stringa \u00e8 pari a 255};<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">begin<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u2026<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u2026<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">nome:=\u2019Mario Rossi\u2019;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">se utilizziamo l\u2019istruzione Write passando come parametro la variabile nome<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Writeln(nome);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">il programma stamper\u00e0 sullo schermo<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mario Rossi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E fin qui niente di nuovo. Da notare che il primo carattere della stringa nome \u00e8 nome[1] ovvero \u201cM\u201d mentre nell\u2019elemento 0 nome[0] \u00e8 contenuto il valore della lunghezza della stringa, in questo caso nome[0]=11, infatti la stringa \u2018Mario Rossi\u2019 contiene 11 caratteri, e poi\u00a0 nome[1]=\u2019M\u2019\u2026 nome[10]=\u2019s\u2019 nome[11]=\u2019i\u2019.\u00a0 Naturalmente c\u2019\u00e8 molto di pi\u00f9 le procedure e le funzioni dedicate alle stringhe facilitano la manipolazione dei dati in esse contenute:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Delete<\/strong> (str, pos, num)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Elimina dalla variabile str, a partire dalla posizione pos, num caratteri<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Per esempio delete(\u2018ciao amici\u2019,1,4) eliminer\u00e0 4 caratteri a partire dal primo, pertanto la stringa diventer\u00e0 \u2018 amici\u2019)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Insert<\/strong> (testo, str, pos)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Inserisce il testo nella stringa str a partire dalla posizione pos<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Per esempio Insert (\u2018cari \u2019,\u2018ciao amici\u2019,5) la stringa ottenuta sar\u00e0 \u2018ciao cari amici\u2019 infatti a partire dal quinto carattere, lo spazio tra le due parole, inserir\u00e0 la stringa \u2018cari \u2018.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Str<\/strong> (num, stri)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Converte il parametro num in una stringa che viene memorizzata, nella variabile stri.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Val<\/strong> (stringa, valore, errcode)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Converte il numero contenuto in stringa nel valore numerico corrispondente al tipo indicato dalla variabile valore e pone in errcode un codice diverso da 0\u00a0 se si verifica un errore<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Copy<\/strong> (str, pos, n)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ritorna n caratteri\u00a0 della stringa str a partire alla posizione pos. Se n eccede la lunghezza della stringa viene restituita una stringa contenente solo i caratteri compresi nella stringa, se pos \u00e8 oltre la lunghezza della stringa viene restituita una stringa nulla<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Concat<\/strong> (stringa1, stringa2, stringa3, .. stringaN)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Restituisce una stringa formata dal concatenamento delle stringhe passate negli argomenti. Se la lunghezza eccede i 255 caratteri si verifica un errore. Concat si utilizza per compatibilit\u00e0 col pascal standard, ma al suo posto si pu\u00f2 usare l\u2019operatore di addizione:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">writeln(concat(\u2018ABC\u2019,\u2019DEF\u2019,\u2019GHI\u2019)); restituisce la stringa \u2018ABCDEFGHI\u2019 allo stesso modo di writeln(\u2018ABC\u2019+\u2019DEF\u2019+\u2019GHI\u2019) che stampa \u2018ABCDEFGHI\u2019<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Lenght<\/strong> (str)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Restituisce la lunghezza del parametro str<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Pos <\/strong>( stringaObj, stringaTarget)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Rerstuisce la posizione del primo carattere della stringaObj all\u2019interno della stringaTarget. Se non viene trovata nessuna occorrenza viene restituito il valore 0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Dunque come abbiamo visto il Turbo Pascal deriva dal Pascal standard del quale amplia le possibilit\u00e0 tramite l\u2019offerta di funzioni, procedure e tipi, come ha fatto Borland,\u00a0 che possono essere facilmente implementati e riutilizzati in altri programmi da parte dell\u2019utente. E vedremo in dettaglio pi\u00f9 avanti con alcuni esempi una piccola parte di ci\u00f2 che \u00e8 possibile ottenere dalla natura di linguaggio strutturato tipica del Turbo Pascal. In questo capitolo abbiamo visto un po pi\u00f9 nel dettaglio il tipo string, ma in Turbo Pascal \u00e8 possibile utilizzare tipi di dati complessi come gli ARRAY, i RECORD e i SET. Come abbiamo visto il tipo string \u00e8 simile ad un array di caratteri che ha nell\u2019elemento di indice zero il valore che indica la lunghezza della stringa. Ora vedremo come si definisce un array. Intanto diciamo che un array \u00e8 una collezione di oggetti dello stesso tipo: possiamo definire array di interi, di caratteri, di stringhe, di numeri reali, ma non possiamo definire un array che contenga dati di tipi diversi tra loro. Per esempio<\/p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">type<\/p>\r\n<p>giorni = (Lun,Mar,Mer,Gio,Ven,Sab,Dom)<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">var<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">OreLavoro :array[l .. 8] of Integer;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Settimana:\u00a0 array[l .. 7] of giorni;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Si possono inoltre definire array a pi\u00f9 dimensioni ad esempio<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Type<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">OreLavoro =array[l .. 8] of Integer;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Settimana=\u00a0 array[l .. 7] of Orelavoro;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Var<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">settimanaLavorativa: settimana;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">dove abbiamo a disposizione una matrice di 7 x 8 variabili.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vediamo ora un semplice programma di esempio cos\u00ec da chiarire meglio:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>program<\/strong> Matrici;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{questa che segue \u00e8 una direttiva al compilatore. indica al compilatore di eseguire sempre un controllo sulla validit\u00e0 degli indici. il controllo}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{rende pi\u00f9 lenta l&#8217;esecuzione del programma, per cui \u00e8 bene attivarlo in fase di debug ($R+) e disattivarlo quando si rilascia il programma ($R-)}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{<strong>$R+<\/strong>}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Type<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">OreLavoro =<strong>array<\/strong>[1..8] of Integer;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Settimana=\u00a0 <strong>array<\/strong>[1..7] of Orelavoro;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">lettere = string[20];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Var<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">settimanaLavorativa: Settimana; ;{ questo \u00e8 un array a 2 dimensioni [1..7,1..8}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">arraysemplice : <strong>array<\/strong>[0..100] <strong>of<\/strong> real;{ questo \u00e8 un array di real}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{il seguente \u00e8 un array di tipo stringa.}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{Non \u00e8 possibile dichiarare direttamente un array di tipo stringa}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{con un&#8217;istruzione tipo &#8220;parole:array[0..20] of string[50]&#8221;}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{ma \u00e8 necessario definire prima un tipo stringa come\u201d lettere = string[20];\u201d}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">parole: array[0..20] of lettere;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">x,y,k : integer;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{riempiamo l\u2019array a due dimensioni con i numeri da 1 a n}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>begin<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">k:=1;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>for<\/strong> x:=1 to 7\u00a0 <strong>do<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>for<\/strong> y:=1 to 8\u00a0 <strong>do<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>begin<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">settimanaLavorativa[x,y]:=k;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">k:=k+1;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>end<\/strong>;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>for<\/strong> x:=1 to 7 <strong>do<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>begin<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>for<\/strong> y:=1 to 8 <strong>do<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>write<\/strong>(settimanalavorativa[x,y],&#8217;\u00a0 &#8216;);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>writeln;<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>end<\/strong>;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{assegnamo un valore ad un array di real}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">arraysemplice[5]:=34.56;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{assegnamo una stringa ad un array di srting}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">parole[0]:=&#8217;buongiorno&#8217;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>end<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Come si vede le possibilit\u00e0 sono diverse ed \u00e8 facile immaginare come sia possibile definire array a partire da tipi definiti dall\u2019utente, in maniera semplice ed efficace. Dicevamo che un array \u00e8 una collezione finita di oggetti dello stesso tipo, dunque come possiamo mettere insieme oggetti di tipo diverso? Il Turbo Pascal mette a disposizione il tipo <strong>Record<\/strong> che rappresenta un tipo di dato strutturato che ci consente di tenere insieme dati di tipo diverso: numeri, caratteri, stringhe, valori booleani, tipi definiti dall\u2019utente, persino altri record. Nel MSX Basic l\u2019istruzione field si avvicina al concetto di record, ma rispetto al tipo record del Turbo Pascal \u00e8 molto limitata. Vediamo un primo esempio di record<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nella sezione Type si definisce il record<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>type<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">anagrafica = <strong>Record<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nome: string[40];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cognome: string[40];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Indirizzo1:\u00a0 string[40];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Citta:\u00a0 string[40];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cap:\u00a0 string[5];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">et\u00e0: integer;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Peso: real;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Altezza:real;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>end<\/strong>;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">{e nella sezione var si definiscono le variabili del tipo definito record}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>var<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">agenda : anagrafica;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>begin<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">agenda.Nome:=\u2019Mario\u2019<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">agenda.Cognome:=\u201dRossi\u2019<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>end<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Il Turbo Pascal mette a disposizione la parola chiave <strong>With<\/strong> che permette di semplificare la gestione dei record omettendo il nome della variabile facendo riferimento solo ai campi, in questo modo:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>with<\/strong> agenda do<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">begin<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nome:=\u2019Mario\u2019;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cognome:=\u2019Rossi\u2019;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u2026.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Peso:=77,4<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Altezza:=1.78<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">End;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">allo stesso modo \u00e8 possibile dichiarare un array di record aggiungendo la parola chiave alla dichiarazione della variabile. In questo caso sia che si utilizzi la notazione diretta o la notazione with bisogna indicare l\u2019elemento dell\u2019array:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">agenda[x].Nome:=\u2019Nome\u2019<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">o tramite la parola chiave with,<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">with agenda[x]do<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">begin<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nome:=\u2019Mario\u2019;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cognome:=\u2019Rossi\u2019;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u2026.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Peso:=77,4<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Altezza:=1.78<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">End;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vediamo ora il tipo SET: Un set o, come si usa dire in matematica, un insieme \u00e8 una collezione di oggetti correlati tra loro che possono essere pensati come un intero. Ogni oggetto in un insieme di questo tipo \u00e8 chiamato membro o elemento dell&#8217;insieme. Esempi di insiemi potrebbero essere:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">tutti i numeri interi da 1 a 100<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">tutte le lettere dell\u2019alfabeto<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">tutti i numeri primi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">due inisemi sono uguali tra loro solo se tutti gli elementi dei due insiemi sono uguali. Ci sono tre operazioni che possono essere effettuate sugli insiemi:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">l\u2019unione, l\u2019intersezione e il complemento relativo:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">L\u2019unione\u00a0 di due insiemi, per esempio A=[1,2,3] e B=[2,8,5] , restituisce un insieme che comprende i membri di entrambi gli insiemi: A+B=[1,2,3,5,8]<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">L\u2019intersezione di due insiemi per esempio A=[1,2,3] e B=[2,8,5], restituisce un insieme che comprende solo i membri presenti in entrambi gli insiemi: A*B=[2]<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Il complemento relativo di B rispetto ad A per esempio A=[1,2,3] e B=[2,8,5], resrtuisce un insieme i cui membri appartengono ad A, ma non a B: A-B=[1,3]<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Sebbene in matematica non vi sono restrizioni nei tipi di oggetti che possono essere contenuti in un insieme, Turbo Pascal offre una forma ristretta di Set, ovvero \u00e8 un SET pu\u00f2 contenere solo oggetti dello stesso tipo, chiamato tipo base, e il tipo base deve essere un tipo di dato semplice eccetto il tipo real. Un esmpio di dichiarazione di SET \u00e8 il seguente:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">type<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">GiorniDellaSettimana <strong>set of<\/strong> (Lun,Mar,Mer,Gio,Ven,Sab, Dom);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caratteri <strong>Set of <\/strong>char;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">gli operatori che consentono di operare sugli insiemi sono i seguenti:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>+ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>produce l\u2019unione di due insiemi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>produce il complemento relativo di due insiemi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>produce l\u2019intersezione di due insiemi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla l\u2019uguaglianza tra due insiemi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&lt;&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla l\u2019inuguaglianza tra due insiemi<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla se tutti i membri del secondo insieme sono inclusi nel primo<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&lt;=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla se tutti i membri del primo insieme sono inclusi nel secondo<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>In\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla se un elemento \u00e8 presente nell\u2019insieme indicato nell\u2019operazione: se a=9 e b=set of integer allora l\u2019espressione<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">If (a in b)\u00a0 then\u2026 risulta vera<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ora disponiamo di sufficienti informazioni per cominciare a scrivere qualche programma in Turbo Pascal . Nel prossimo capitolo daremo un\u2019occhiata ai file, in modo che possiamo disporre anche della possibilit\u00e0 di salvare e caricare i dati dei nostri programmi e successivamente concluderemo con la creazione e l\u2019utilizzo delle librerie nei nostri programmi in Turbo Pascal<\/p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>MSX Turbo Pascal Rubrica a cura di Stefano Roperto (parte 6) Capitolo 6 PROCEDURE E FUNZIONI Turbo Pascal, come abbiamo visto nel capitolo 4 fornisce al programmatore una completa collezione di procedure e funzioni che rendono il linguaggio moderno e completo. In questo capitolo vedremo le pi\u00f9 importanti. Non \u00e8 necessario spiegarle tutte in quanto [&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":"off","_et_pb_old_content":"<!-- wp:heading -->\r\n<h2 class=\"wp-block-heading\">Capitolo 6<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:heading -->\r\n<h2 class=\"wp-block-heading\">PROCEDURE E FUNZIONI<\/h2>\r\n<!-- \/wp:heading -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Turbo Pascal, come abbiamo visto nel capitolo 4 fornisce al programmatore una completa collezione di procedure e funzioni che rendono il linguaggio moderno e completo. In questo capitolo vedremo le pi\u00f9 importanti. Non \u00e8 necessario spiegarle tutte in quanto molte sono comuni alle funzioni presenti in \u00a0altri linguaggi, compreso MSX basic, e altre sono di immediata comprensione. Il Turbo Pascal fornisce procedure e funzioni per:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:list -->\r\n<ul><!-- wp:list-item -->\r\n<li>Manipolazione di stringhe<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Gestione dei files<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Allocazione di variabili, puntatori e gestione della memoria<\/li>\r\n<!-- \/wp:list-item -->\r\n\r\n<!-- wp:list-item -->\r\n<li>Input e output di dati<\/li>\r\n<!-- \/wp:list-item --><\/ul>\r\n<!-- \/wp:list -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>In aggiunta a ci\u00f2 abbiamo a disposizione funzioni\u00a0 e procedure di carattere generale.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Cominciamo con le funzioni aritmetiche :<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Abs<\/strong>(num) dove num \u00e8 un integer o un real del quale si chiede di restituire il valore assoluto che sar\u00e0 dello stesso tipo di num<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Arctan<\/strong>(num) restituisce l\u2019angolo in radianti di cui la tangente \u00e8 num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Cos<\/strong>(num)\u00a0 restituisce il coseno di num. Num \u00e8 espresso in radianti e pu\u00f2 essere real o integer. Il valore restituito \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Exp<\/strong>(num)\u00a0 restituisce l\u2019esponenziale di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Frac<\/strong>(num)\u00a0 restituisce la parte frazionaria di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Int<\/strong>(num)\u00a0 restituisce la parte intera di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Ln<\/strong>(num) restituisce il logaritmo naturale di num. Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Sin<\/strong>(num) restituisce il seno di num. Num \u00e8 espresso in radianti \u00e8 pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Sqr<\/strong>(num) restituisce il quadrato di num Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Sqrt<\/strong>(num) restituisce la radice quadrata di num Num pu\u00f2 essere real o integer, ma il risultato \u00e8 sempre un real<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Per i tipi scalari abbiamo a disposizioni alcune Funzioni:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Pred<\/strong>(num) restituisce il predecessore di num in un a variabile di tipo scalare<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Succ<\/strong>(num) restituisce il successore di num in un a variabile di tipo scalare<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Odd<\/strong>(num) restituisce true se num \u00e8 dispari e false se num \u00e8 pari. Num deve essere un integer<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Ci sono poi le cosiddette Funzioni di conversione:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Chr<\/strong>(num) restituisce il carattere il cui codice ascii \u00e8 indicato da num<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Ord<\/strong>(var) restituisce l\u2019ordinale del valore var in un set definito dal tipo var. var pu\u00f2 essere un qaulsiasi tipo scalare, eccetto real, e il risultato \u00e8 di tipo integer<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Round<\/strong>(num) restituisce il valore num arrotondato al valore intero pi\u00f9 vicino. Num deve essere un real e viene restituito un integer<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Trunc<\/strong>(num) restituisce l\u2019intero maggiore (se num >=0) o il minore (se num >0). Num deve essere un real e viene restituito un integer<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>E infine le funzioni di uso generale generale:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Hi<\/strong>(num) restituisce il byte alto del valore intero num<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>KeyPressed<\/strong>(num) restituisce true se \u00e8 premuto un taso o false se non \u00e8 premuto alcun tasto<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Lo<\/strong>(num) restituisce il byte basso del valore intero num<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Random<\/strong> restituisce un numero casuale >= 0 <1<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Random<\/strong>(num) restituisce un numero casuale >= 0 <num. Num deve essere un integer<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>ParamCount<\/strong> restituisce il numero integer di parametri passati al programma sulla linea di comando separati da spazio o tab<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>ParamStr<\/strong>(N) restituisce\u00a0 l\u2019eNessimo parametro dalla linea di comando e non pu\u00f2 essere maggiore di ParamCount. ParamStr(0) restituisce il nome del programma<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>SizeOf<\/strong>(nome) restituisce un integer che indica il numero di bytes occupati in memoria dalla variabile o dal tipo name<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Swap<\/strong>(num) scambia i byte di ordine alto e basso del valore integer num<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>UpCase<\/strong>(chr) restituisce l\u2019equivalente maiuscolo del carattere chr. Se non esiste, non viene modificato nessun valore<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Turbo Pascal fornisce un set completo di funzioni e\u00a0 procedure dedicate alla gestione delle stringhe. Il tipo string e il tipo char sono compatibili tra loro , di fatto Le stringhe in Turbo Pascal sono un tipo di dato derivato dal tipo char, tecnicamente il tipo string \u00e8 simile ad un array di caratteri come si evince dalla sua definizione in questo esempio, con la differenza che l\u2019elemento di indice 0 contiene la lunghezza dell\u2019array stesso:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>type<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 nome = string[50] ;{i caratteri vanno dall\u2019elemento 1 all\u2019elemento 50, mentre l\u2019elemento 0 contiene il valore 50, per cui in memoria la stringa nome occuper\u00e0 51 bytes. Il limite della lunghezza di un a variabile stringa \u00e8 pari a 255};<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>begin<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>\u2026<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>\u2026<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>nome:=\u2019Mario Rossi\u2019;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>se utilizziamo l\u2019istruzione Write passando come parametro la variabile nome<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Writeln(nome);<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>il programma stamper\u00e0 sullo schermo<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Mario Rossi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>E fin qui niente di nuovo. Da notare che il primo carattere della stringa nome \u00e8 nome[1] ovvero \u201cM\u201d mentre nell\u2019elemento 0 nome[0] \u00e8 contenuto il valore della lunghezza della stringa, in questo caso nome[0]=11, infatti la stringa \u2018Mario Rossi\u2019 contiene 11 caratteri, e poi\u00a0 nome[1]=\u2019M\u2019\u2026 nome[10]=\u2019s\u2019 nome[11]=\u2019i\u2019.\u00a0 Naturalmente c\u2019\u00e8 molto di pi\u00f9 le procedure e le funzioni dedicate alle stringhe facilitano la manipolazione dei dati in esse contenute:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Delete<\/strong> (str, pos, num)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Elimina dalla variabile str, a partire dalla posizione pos, num caratteri<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Per esempio delete(\u2018ciao amici\u2019,1,4) eliminer\u00e0 4 caratteri a partire dal primo, pertanto la stringa diventer\u00e0 \u2018 amici\u2019)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Insert<\/strong> (testo, str, pos)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Inserisce il testo nella stringa str a partire dalla posizione pos<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Per esempio Insert (\u2018cari \u2019,\u2018ciao amici\u2019,5) la stringa ottenuta sar\u00e0 \u2018ciao cari amici\u2019 infatti a partire dal quinto carattere, lo spazio tra le due parole, inserir\u00e0 la stringa \u2018cari \u2018.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Str<\/strong> (num, stri)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Converte il parametro num in una stringa che viene memorizzata, nella variabile stri.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Val<\/strong> (stringa, valore, errcode)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Converte il numero contenuto in stringa nel valore numerico corrispondente al tipo indicato dalla variabile valore e pone in errcode un codice diverso da 0\u00a0 se si verifica un errore<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Copy<\/strong> (str, pos, n)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Ritorna n caratteri\u00a0 della stringa str a partire alla posizione pos. Se n eccede la lunghezza della stringa viene restituita una stringa contenente solo i caratteri compresi nella stringa, se pos \u00e8 oltre la lunghezza della stringa viene restituita una stringa nulla<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Concat<\/strong> (stringa1, stringa2, stringa3, .. stringaN)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Restituisce una stringa formata dal concatenamento delle stringhe passate negli argomenti. Se la lunghezza eccede i 255 caratteri si verifica un errore. Concat si utilizza per compatibilit\u00e0 col pascal standard, ma al suo posto si pu\u00f2 usare l\u2019operatore di addizione:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>writeln(concat(\u2018ABC\u2019,\u2019DEF\u2019,\u2019GHI\u2019)); restituisce la stringa \u2018ABCDEFGHI\u2019 allo stesso modo di writeln(\u2018ABC\u2019+\u2019DEF\u2019+\u2019GHI\u2019) che stampa \u2018ABCDEFGHI\u2019<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Lenght<\/strong> (str)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Restituisce la lunghezza del parametro str<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Pos <\/strong>( stringaObj, stringaTarget)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Rerstuisce la posizione del primo carattere della stringaObj all\u2019interno della stringaTarget. Se non viene trovata nessuna occorrenza viene restituito il valore 0<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Dunque come abbiamo visto il Turbo Pascal deriva dal Pascal standard del quale amplia le possibilit\u00e0 tramite l\u2019offerta di funzioni, procedure e tipi, come ha fatto Borland,\u00a0 che possono essere facilmente implementati e riutilizzati in altri programmi da parte dell\u2019utente. E vedremo in dettaglio pi\u00f9 avanti con alcuni esempi una piccola parte di ci\u00f2 che \u00e8 possibile ottenere dalla natura di linguaggio strutturato tipica del Turbo Pascal.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>In questo capitolo abbiamo visto un po pi\u00f9 nel dettaglio il tipo string, ma in Turbo Pascal \u00e8 possibile utilizzare tipi di dati complessi come gli ARRAY, i RECORD e i SET.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Come abbiamo visto il tipo string \u00e8 simile ad un array di caratteri che ha nell\u2019elemento di indice zero il valore che indica la lunghezza della stringa. Ora vedremo come si definisce un array. Intanto diciamo che un array \u00e8 una collezione di oggetti dello stesso tipo: possiamo definire array di interi, di caratteri, di stringhe, di numeri reali, ma non possiamo definire un array che contenga dati di tipi diversi tra loro. Per esempio<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>type<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>giorni = (Lun,Mar,Mer,Gio,Ven,Sab,Dom)<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>var<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>OreLavoro :array[l .. 8] of Integer;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Settimana:\u00a0 array[l .. 7] of giorni;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Si possono inoltre definire array a pi\u00f9 dimensioni ad esempio<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Type<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>OreLavoro =array[l .. 8] of Integer;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Settimana=\u00a0 array[l .. 7] of Orelavoro;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Var<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>settimanaLavorativa: settimana;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>dove abbiamo a disposizione una matrice di 7 x 8 variabili.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Vediamo ora un semplice programma di esempio cos\u00ec da chiarire meglio:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>program<\/strong> Matrici;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{questa che segue \u00e8 una direttiva al compilatore. indica al compilatore di eseguire sempre un controllo sulla validit\u00e0 degli indici. il controllo}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{rende pi\u00f9 lenta l'esecuzione del programma, per cui \u00e8 bene attivarlo in fase di debug ($R+) e disattivarlo quando si rilascia il programma ($R-)}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{<strong>$R+<\/strong>}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Type<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>OreLavoro =<strong>array<\/strong>[1..8] of Integer;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Settimana=\u00a0 <strong>array<\/strong>[1..7] of Orelavoro;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>lettere = string[20];<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Var<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>settimanaLavorativa: Settimana; ;{ questo \u00e8 un array a 2 dimensioni [1..7,1..8}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>arraysemplice : <strong>array<\/strong>[0..100] <strong>of<\/strong> real;{ questo \u00e8 un array di real}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{il seguente \u00e8 un array di tipo stringa.}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{Non \u00e8 possibile dichiarare direttamente un array di tipo stringa}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{con un'istruzione tipo \"parole:array[0..20] of string[50]\"}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{ma \u00e8 necessario definire prima un tipo stringa come\u201d lettere = string[20];\u201d}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>parole: array[0..20] of lettere;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>x,y,k : integer;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{riempiamo l\u2019array a due dimensioni con i numeri da 1 a n}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>begin<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>k:=1;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>for<\/strong> x:=1 to 7\u00a0 <strong>do<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>for<\/strong> y:=1 to 8\u00a0 <strong>do<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>begin<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>settimanaLavorativa[x,y]:=k;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>k:=k+1;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>end<\/strong>;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>for<\/strong> x:=1 to 7 <strong>do<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>begin<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>for<\/strong> y:=1 to 8 <strong>do<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>write<\/strong>(settimanalavorativa[x,y],'\u00a0 ');<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>writeln;<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>end<\/strong>;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{assegnamo un valore ad un array di real}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>arraysemplice[5]:=34.56;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{assegnamo una stringa ad un array di srting}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>parole[0]:='buongiorno'<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>end<\/strong>.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Come si vede le possibilit\u00e0 sono diverse ed \u00e8 facile immaginare come sia possibile definire array a partire da tipi definiti dall\u2019utente, in maniera semplice ed efficace. Dicevamo che un array \u00e8 una collezione finita di oggetti dello stesso tipo, dunque come possiamo mettere insieme oggetti di tipo diverso? Il Turbo Pascal mette a disposizione il tipo <strong>Record<\/strong> che rappresenta un tipo di dato strutturato che ci consente di tenere insieme dati di tipo diverso: numeri, caratteri, stringhe, valori booleani, tipi definiti dall\u2019utente, persino altri record. Nel MSX Basic l\u2019istruzione field si avvicina al concetto di record, ma rispetto al tipo record del Turbo Pascal \u00e8 molto limitata. Vediamo un primo esempio di record<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Nella sezione Type si definisce il record<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>type<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>anagrafica = <strong>Record<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Nome: string[40];<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Cognome: string[40];<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Indirizzo1:\u00a0 string[40];<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Citta:\u00a0 string[40];<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Cap:\u00a0 string[5];<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>et\u00e0: integer;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Peso: real;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Altezza:real;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>end<\/strong>;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>{e nella sezione var si definiscono le variabili del tipo definito record}<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>var<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>agenda : anagrafica;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>begin<\/strong><\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>agenda.Nome:=\u2019Mario\u2019<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>agenda.Cognome:=\u201dRossi\u2019<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>end<\/strong>.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Il Turbo Pascal mette a disposizione la parola chiave <strong>With<\/strong> che permette di semplificare la gestione dei record omettendo il nome della variabile facendo riferimento solo ai campi, in questo modo:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>with<\/strong> agenda do<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>begin<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Nome:=\u2019Mario\u2019;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Cognome:=\u2019Rossi\u2019;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>\u2026.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Peso:=77,4<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Altezza:=1.78<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>End;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>allo stesso modo \u00e8 possibile dichiarare un array di record aggiungendo la parola chiave alla dichiarazione della variabile. In questo caso sia che si utilizzi la notazione diretta o la notazione with bisogna indicare l\u2019elemento dell\u2019array:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>agenda[x].Nome:=\u2019Nome\u2019<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>o tramite la parola chiave with,<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>with agenda[x]do<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>begin<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Nome:=\u2019Mario\u2019;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Cognome:=\u2019Rossi\u2019;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>\u2026.<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Peso:=77,4<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Altezza:=1.78<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>End;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Vediamo ora il tipo SET: Un set o, come si usa dire in matematica, un insieme \u00e8 una collezione di oggetti correlati tra loro che possono essere pensati come un intero. Ogni oggetto in un insieme di questo tipo \u00e8 chiamato membro o elemento dell'insieme. Esempi di insiemi potrebbero essere:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>tutti i numeri interi da 1 a 100<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>tutte le lettere dell\u2019alfabeto<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>tutti i numeri primi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>due inisemi sono uguali tra loro solo se tutti gli elementi dei due insiemi sono uguali. Ci sono tre operazioni che possono essere effettuate sugli insiemi:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>l\u2019unione, l\u2019intersezione e il complemento relativo:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>L\u2019unione\u00a0 di due insiemi, per esempio A=[1,2,3] e B=[2,8,5] , restituisce un insieme che comprende i membri di entrambi gli insiemi: A+B=[1,2,3,5,8]<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>L\u2019intersezione di due insiemi per esempio A=[1,2,3] e B=[2,8,5], restituisce un insieme che comprende solo i membri presenti in entrambi gli insiemi: A*B=[2]<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Il complemento relativo di B rispetto ad A per esempio A=[1,2,3] e B=[2,8,5], resrtuisce un insieme i cui membri appartengono ad A, ma non a B: A-B=[1,3]<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Sebbene in matematica non vi sono restrizioni nei tipi di oggetti che possono essere contenuti in un insieme, Turbo Pascal offre una forma ristretta di Set, ovvero \u00e8 un SET pu\u00f2 contenere solo oggetti dello stesso tipo, chiamato tipo base, e il tipo base deve essere un tipo di dato semplice eccetto il tipo real. Un esmpio di dichiarazione di SET \u00e8 il seguente:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>type<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>GiorniDellaSettimana <strong>set of<\/strong> (Lun,Mar,Mer,Gio,Ven,Sab, Dom);<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Caratteri <strong>Set of <\/strong>char;<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>gli operatori che consentono di operare sugli insiemi sono i seguenti:<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>+ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>produce l\u2019unione di due insiemi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>-\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>produce il complemento relativo di due insiemi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>produce l\u2019intersezione di due insiemi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla l\u2019uguaglianza tra due insiemi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong><>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla l\u2019inuguaglianza tra due insiemi<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>>=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla se tutti i membri del secondo insieme sono inclusi nel primo<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong><=\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla se tutti i membri del primo insieme sono inclusi nel secondo<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>In\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>controlla se un elemento \u00e8 presente nell\u2019insieme indicato nell\u2019operazione: se a=9 e b=set of integer allora l\u2019espressione<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>If (a in b)\u00a0 then\u2026 risulta vera<\/p>\r\n<!-- \/wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>Ora disponiamo di sufficienti informazioni per cominciare a scrivere qualche programma in Turbo Pascal . Nel prossimo capitolo daremo un\u2019occhiata ai file, in modo che possiamo disporre anche della possibilit\u00e0 di salvare e caricare i dati dei nostri programmi e successivamente concluderemo con la creazione e l\u2019utilizzo delle librerie nei nostri programmi in Turbo Pascal<\/p>\r\n<!-- \/wp:paragraph -->","_et_gb_content_width":"","footnotes":""},"categories":[3,5],"tags":[],"dipi_cpt_category":[],"class_list":["post-6373","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\/6373","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=6373"}],"version-history":[{"count":13,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/6373\/revisions"}],"predecessor-version":[{"id":6387,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/6373\/revisions\/6387"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=6373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=6373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=6373"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=6373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}