{"id":297,"date":"2014-12-30T16:32:05","date_gmt":"2014-12-30T15:32:05","guid":{"rendered":"http:\/\/www.valcon.it\/pascal\/?p=297"},"modified":"2014-12-30T16:32:05","modified_gmt":"2014-12-30T15:32:05","slug":"array","status":"publish","type":"post","link":"https:\/\/www.valcon.it\/pascal\/array\/","title":{"rendered":"Array"},"content":{"rendered":"<p>La notazione funzionale si \u00e8 rivelata molto flessibile per il riutilizzo del codice della funzione <tt>Max2(X, Y)<\/tt>, infatti<\/p>\n<div class=\"indent\">\n<pre>Max3:= Max2(Max2(X1, X2), X3);\r\nMax4:= Max2(Max2(Max2(X1, X2), X3), X4);\r\n...\r\nMaxN:=(Max2(...(Max2(Max2(X1, X2), X3), ...), XN);<\/pre>\n<\/div>\n<p>ma non comoda se bisogna riscrivere l\u2019espressione a seconda del numero di variabili.<\/p>\n<p>L\u2019algoritmo sottostante \u00e8 invece<\/p>\n<div class=\"indent\" style=\"padding-left: 30px;\"><tt>(X1, X2)? --&gt; M --&gt; (M, X2)? --&gt; M --&gt; (M, X3)? --&gt; M --&gt; (M, X4)? --&gt; M ...<\/tt><\/div>\n<p>cio\u00e8 iterativo&#8230;<\/p>\n<p>Un altro esempio \u00e8<\/p>\n<div class=\"indent\">\n<pre>Media2:=(X1 + X2)\/2;\r\nMedia3:=(X1 + X2 + X3)\/3;\r\n...\r\nMediaN:=(X1 + X2 + ... + XN)\/N;<\/pre>\n<\/div>\n<p>Sarebbe utile poter realizzare del codice che lavorasse con un <em>pacchetto<\/em>, di dimensione a piacere ma <em>ragionevole<\/em>, di variabili:<\/p>\n<div class=\"indent\">\n<pre class=\"\">function MaxV(P: \"Pacchetto di Reali\"): Real;<\/pre>\n<\/div>\n<p>Il Pascal permette di dichiarare vettori di dimensione costante, cio\u00e8 la memoria allocata rimane costante anche se si utilizza solo una parte della capacit\u00e0 del vettore.<\/p>\n<p>Una dichiarazione di vettore \u00e8 la seguente<\/p>\n<div class=\"indent\">\n<pre class=\"\">Var V: Array[1..10] of Real;<\/pre>\n<\/div>\n<p>dove<\/p>\n<ul>\n<li><tt>V<\/tt>, il nome della variabile definita subito dopo i due punti<\/li>\n<li><tt>Array<\/tt>, indica che si tratta di un vettore (sequenza, pacchetto, raggruppamento, blocco) di elementi pi\u00f9 semplici<\/li>\n<li><tt>[ ]<\/tt>, le parentesi quadre indicano l\u2019elenco dei soprannomi per ciascun elemento nel vettore, in modo da poterli distinguere univocamente<\/li>\n<li><tt>1..10<\/tt>, il primo e l\u2019ultimo soprannome e tutti quelli compresi nell\u2019intervallo da 1 a 10 (..)<\/li>\n<li><tt>of<\/tt>, (seguito da un tipo: <em>real, integer, boolean, &#8230;<\/em>) indica il tipo comune degli elementi raggruppati nel vettore<\/li>\n<\/ul>\n<p>Il primo indice (soprannome) \u00e8, quasi sempre, <strong>1<\/strong> mentre l\u2019ultimo indice \u00e8 un intero qualsiasi maggiore del primo (<strong>10<\/strong>), di conseguenza da quest\u2019ultimo dipende la dimensione del vettore.<\/p>\n<p>Conviene dichiarare la dimensione, una volta per tutte, all\u2019inizio del programma con<\/p>\n<div class=\"indent\">\n<pre class=\"\">Const\u00a0DIM = 10;<\/pre>\n<\/div>\n<p>rendendo pi\u00f9 semplice la modificabilit\u00e0 del codice.<\/p>\n<p>I singoli elementi del vettore sono <em>raggiungibili<\/em> per operazioni di lettura o scrittura con una scrittura del tipo <tt>V[E]<\/tt> dove <tt>E<\/tt> \u00e8 una espressione che d\u00e0 come risultato un valore compreso nell\u2019intervallo di definizione del vettore.<\/p>\n<h4 id=\"hn_59ca4f8bbb_1\">Esempi<\/h4>\n<div class=\"indent\">\n<pre class=\"\">V[1]:=V[2];\r\nV[5]:=3*V[10];\r\nReadLn(V[i]);\r\nWrite(V[3*i]:10:5);<\/pre>\n<\/div>\n<p><tt>i<\/tt> e <tt>3*i<\/tt> sono espressioni intere con valore nell\u2019intervallo <tt>[1..DIM]<\/tt>.<\/p>\n<p>I vettori diventano a tutti gli effetti delle risorse (come variabili, costanti) e quindi compariranno anche come parametri per eventuali sottoprogrammi, allora la dichiarazione di funzione precedente potrebbe essere del tipo<\/p>\n<pre class=\"\">Function MaxN(V: Array[1..DIM] of Real): Real;<\/pre>\n<p>ma il TurboPascal non accetta dichiarazioni di tipo <em>complesso<\/em> nell\u2019elenco dei parametri quindi dobbiamo riassumere con una dichiarazione di tipo<\/p>\n<div class=\"indent\">\n<pre class=\"\">Type\u00a0Vettore: Array[1..DIM] of Real;<\/pre>\n<\/div>\n<p>(il nome scelto \u00e8 libero&#8230;) e la dichiarazione del vettore diventa<\/p>\n<div class=\"indent\">\n<pre class=\"\">Var\u00a0V: Vettore;<\/pre>\n<\/div>\n<p>e la funzione diventa<\/p>\n<div>\n<pre class=\"\">Function MaxV(V: Vettore): Real;<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La notazione funzionale si \u00e8 rivelata molto flessibile per il riutilizzo del codice della funzione Max2(X, Y), infatti Max3:= Max2(Max2(X1, X2), X3); Max4:= Max2(Max2(Max2(X1, X2), X3), X4); &#8230; MaxN:=(Max2(&#8230;(Max2(Max2(X1, X2), X3), &#8230;), XN); ma non comoda se bisogna riscrivere l\u2019espressione a seconda del numero di variabili. L\u2019algoritmo sottostante \u00e8 invece (X1, X2)? &#8211;&gt; M &#8211;&gt; &#8230; <a title=\"Array\" class=\"read-more\" href=\"https:\/\/www.valcon.it\/pascal\/array\/\" aria-label=\"Leggi di pi\u00f9 su Array\">Leggi tutto<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts\/297"}],"collection":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/comments?post=297"}],"version-history":[{"count":1,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts\/297\/revisions"}],"predecessor-version":[{"id":298,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts\/297\/revisions\/298"}],"wp:attachment":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/media?parent=297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/categories?post=297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/tags?post=297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}