"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker

Pagina creata da Antonio Perego
 
CONTINUA A LEGGERE
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
FONDAZIONE ISTITUTO TECNICO SUPERIORE
                MECCANICA, MECCATRONICA, MOTORISTICA E PACKAGING
                                 Sede di BOLOGNA
   “TECNICO SUPERIORE PER L’AUTOMAZIONE E IL PACKAGING”

                                     Rif.PA. 2017-7215/RER
                                       Biennio 2017/2019
                                     Progetto 1 Edizione 1
                         Modulo: Basi di programmazione – Basi di informatica
                                                   UF03
                                  A cura di: Matteo Sartini

In collaborazione con:
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
Che Cos’è L’informatica?                                                                  ..??

   Informatica (fusione delle parole informazione e automatica) è l’insieme delle discipline che studiano gli
   strumenti per l’elaborazione automatica dell’informazione e i metodi per un loro uso corretto ed
   efficace.

   L’informatica è la scienza della rappresentazione e dell’elaborazione dell’informazione:

        •   L’accento sull’ “informazione” fornisce una spiegazione del perché l’informatica sia ormai parte
            integrante di molte attività umane: laddove deve essere gestita dell’informazione, l’informatica
            è un valido strumento di supporto;

        •   Il termine “scienza” sottolinea il fatto che, nell’informatica, l’elaborazione dell’informazione
            avviene in maniera sistematica e rigorosa, e pertanto può essere automatizzata.

   L’informatica non è la scienza dei calcolatori elettronici: il calcolatore è lo strumento che la rende
   “operativa”.
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
L’elaboratore (computer, calcolatore) è un’apparecchiatura digitale, elettronica ed automatica capace di
effettuare trasformazioni sui dati:
     •   Digitale: perché i dati sono rappresentati mediante un alfabeto finito, costituito da cifre, digit,
         che ne permette il trattamento mediante regole matematiche
     •   Elettronica: perché è realizzata tramite tecnologie di tipo elettronico
     •   Automatica: perché è capace di eseguire una successione di operazioni senza interventi esterni.

“La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta
in maniera perfettamente onesta.” (Isaac Asimov)
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
Il concetto di memoria

   La capacità dell’elaboratore di eseguire successioni di operazioni in modo automatico è determinata
   dalla presenza di un dispositivo di memoria:
       •   Nella memoria sono registrati i dati e...
       •   ...le operazioni da eseguire su di essi (nell’ordine secondo cui devono essere eseguite): il
           programma è la “ricetta” usata dall’elaboratore per svolgere il proprio compito
   Il programma viene interpretato dall’unità di controllo; tale architettura viene definita MODELLO DI
   VON NEUMAN
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
In sintesi possiamo affermare che:
• Programma: è la sequenza di operazioni atte a predisporre l’elaboratore alla soluzione di una
  determinata classe di problemi. Il programma è la descrizione di un algoritmo in una forma
  comprensibile all’elaboratore
• Algoritmo: è la sequenza finita di istruzioni attraverso le quali un operatore umano è capace di
  risolvere ogni problema di una data classe; non è direttamente eseguibile dall’elaboratore
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
L’elaboratore è una macchina universale: cambiando il programma residente in memoria è in grado di
risolvere problemi di natura diversa (una classe di problemi per ogni programma).
Pertanto l’Informatica è lo studio sistematico degli algoritmi che descrivono e trasformano
l’informazione: la loro teoria, analisi, progetto, efficienza, elaborazione.
E’ possibile svolgere concettualmente una attività di tipo informatico senza l’ausilio del calcolatore, per
esempio nel progettare ed applicare regole precise per svolgere operazioni aritmetiche con carta e
penna; l’elaboratore, tuttavia, è uno strumento di calcolo potente che permette la gestione di quantità
di informazioni altrimenti intrattabili.
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
LA MEMORIA IN INFORMATICA:
Nell’architettura di Von Neuman, che rappresenta l’astrazione dei calcolatori usualmente impiegati,
abbiamo visto come la memoria sia impiegata per registrare i dati e le operazioni su di esse; in
particolare possiamo considerare la memoria come un dispositivo di input e output dei dati e delle
istruzioni del programma.

                                                   Componenti architettura Von Neuman:
                                                   • Memoria centrale
                                                   • CPU - unità di elaborazione
                                                   • Interfaccia verso periferiche
                                                   • BUS
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
Sulla memoria di un computer, fondamentalmente possono essere effettuate le seguenti operazioni:
• Inizializzazione. E’ il trattamento che subisce la memoria prima dell’uso.
• Scrittura. E’ l’operazione di memorizzazione delle informazioni.
• Lettura. E’ l’operazione di recupero delle informazioni memorizzate.
Per parlare indifferentemente di lettura o di scrittura, si usa il termine accesso. Per esempio, per
indicare che una memoria è veloce sia in lettura che in scrittura, si dice che ha un basso tempo di
accesso. L'operazione di cancellazione dei dati in realtà non esiste in quanto più propriamente si può
parlare di sovrascrittura dei dati.
Nelle memorie di supporto alla CPU (registri, cache, RAM, ROM, ecc.) il tempo di accesso deve essere
necessariamente basso per consentire alla memoria di lavorare alla velocità del processore ed evitare di
rallentare la velocità di elaborazione. Il tempo di accesso è, invece, più alto ( minore velocità di accesso )
nelle memorie di massa ( disco fisso, memory card, memorie flash, floppy disk, dvd-rom, cd-rom, ecc. ).
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
MEMORIA PRIMARIA.

La memoria primaria, chiamata anche memoria centrale o memoria principale, contiene dati ed
istruzioni prelevati dalla memoria di massa in attesa che questi siano a loro volta prelevati ed elaborati
dal microprocessore, lavorando dunque in maniera strettamente accoppiata con esso ed essendo
dunque assimilabile ad una memoria di transito o appoggio.
Molto spesso si tratta di memoria RAM e memoria cache e nelle moderne architetture dei processori è
spesso incorporata nella scheda CPU o direttamente nel chip del processore stesso.
È una parte importante del computer in quanto dalle sue dimensioni in termini di capacità di
immagazzinamento dipende dunque la quantità massima di dati che possono essere prelevati e dunque
elaborati dal processore.
Qualora la memoria primaria venga esaurita molti sistemi di elaborazione moderni sono in grado di
implementare il cosiddetto meccanismo della memoria virtuale come estensione provvisoria della
memoria primaria.
"TECNICO SUPERIORE PER L'AUTOMAZIONE E IL PACKAGING" - ITS Maker
Cosa è una memoria?

   Per realizzare una memoria principale vengono normalmente utilizzate tecnologie a semiconduttore
   (cioè vengono utilizzati circuiti integrati a base di silicio).
   Tale memoria è costituita da numerosissime celle di memoria capaci di assumere due stati stabili
   alternativi (zero o uno) attraverso i quali è possibile memorizzare la quantità minima di informazione (1
   bit).
   Le operazioni che possono essere effettuate su questo componente sono due: lettura (load) e scrittura
   (store). Poiché nella realtà quotidiana le scelte possibili in vari casi sono molte più di due, un bit non è
   più sufficiente a rappresentarle e pertanto si è pensato di unire più celle di memoria in registri di
   memoria.
   In particolare, la dimensione del registro più diffusa è quella da 8 bit. L'unione di 8 bit forma infatti 1
   byte di memoria, il primo multiplo del bit, il quale può rappresentare fino a 256 possibili combinazioni
   diverse (28).
   In un registro di memoria le operazioni di lettura/scrittura avvengono contemporaneamente su tutte
   le celle facenti parte del registro. In memorie con registri da 1 byte, quindi, vengono lette 8 celle alla
   volta.

   Ogni registro di memoria è denotato da un indirizzo.
Operazioni sulle memorie

   L’OPERAZIONE DI LETTURA
   Nell'operazione di lettura sulla memoria principale la CPU assume una posizione master rispetto alla
   memoria che è lo slave. I due componenti sono collegati tra loro dal bus di sistema.
   Il processo consiste essenzialmente nella seguente sequenza di operazioni:

   • La CPU trasferisce l'indirizzo del dato da leggere dal Program Counter (PC) al Memory Address
     Register (MAR);
   • Il MAR invia tale indirizzo alla memoria tramite la linea degli indirizzi del bus di sistema
     parallelamente al segnale che specifica il tipo di operazione che si sta effettuando (in questo caso,
     lettura);
   • La memoria preleva il dato contenuto nell'indirizzo specificato dalla CPU e lo invia, tramite la linea
     dei dati (presente anch'essa sul BUS di sistema), al Memory Data Register (MDR) della CPU.

   MAR, PC e MDR sono registri speciali dell'unità centrale della macchina.
Operazioni sulle memorie

  L’OPERAZIONE DI SCRITTURA
  La scrittura consiste principalmente nelle seguenti operazioni:

  • trasferimento dalla CPU al MAR l'indirizzo che si intende scrivere e contemporaneamente all'MDR il
      valore che si intende scrivere;
  • trasferimento del valore dell'MBR (Memory Byte Register) alla cella di memoria il cui indirizzo è
      presente nel MAR.
  La memoria centrale è organizzata come una tabella di celle, ciascuna delle quali è denotata da un
  indirizzo (celle che contengono una sequenza di bit; ogni bit può rappresentare l'informazione 0 oppure 1
  tramite un diverso stato elettrico). Ogni cella ha una dimensione prefissata e gli indirizzi delle celle variano
  tra 0 e n, dove n è una potenza di 2.
  Bisogna distinguere tra vari tipi di memorie primarie, a seconda della funzione svolta e delle loro
  caratteristiche peculiari. Di seguito vengono elencate quelle più importanti.
  C'è da notare che a causa della dispersione della carica del condensatore, di capacità estremamente
  piccola, vi è bisogno di un rinfresco continuo dell'informazione. A questo compito è dedicato un canale del
  circuito di DMA (Direct Memory Access) che ad intervalli regolari (153 ms) deve necessariamente
  rinfrescare l'intera memoria del sistema per evitare la perdita irrimediabile dei dati e quindi il collasso di
  funzionamento del computer.
RAM
Acronimo per "random access memory", ovvero "memoria ad accesso casuale", è la memoria in cui
vengono caricati i dati che devono essere utilizzati dal calcolatore per elaborare. La RAM può essere
volatile (si cancella spontaneamente ed ha bisogno di essere aggiornata), statica o tamponata (mantiene
l'alimentazione anche a macchina spenta). Il processore identifica le celle della RAM tramite indirizzi
preassegnati che ne specificano la posizione: la memoria si presenta, quindi, come un enorme vettore
(stringa ordinata di elementi detti byte, ciascuno individuabile con un indirizzo).
Il termine "random" evidenzia che non ci sono differenze ad accedere alle varie celle della memoria. Le
caratteristiche della RAM vengono ereditate anche da tutte le altre memorie ad accesso casuale
(individuabili facilmente dal fatto che contengono RAM alla fine).
Sostanzialmente le memorie RAM si suddividono in DRAM (dinamiche), SRAM (statiche) che vengono
utilizzate per la memoria cache
CACHE RAM
Memoria associativa integrata nel processore che ha la caratteristica di essere molto veloce; dato l'elevato
costo, viene utilizzata esclusivamente per contenere i dati e le istruzioni utilizzati più di frequente (in modo
da migliorare notevolmente le prestazioni del processore).
La fase di trasferimento da memoria di sistema a memoria cache viene attuata da un apposito circuito che
prende il nome di MMU (Memory Management Unit).
La MMU svolge anche il compito di gestione virtuale della memoria.
ROM
Acronimo per "read only memory", ovvero "memoria in sola lettura (o solamente leggibile)", è una
memoria permanente (cioè ha un contenuto fisso che non può essere cancellato ed inoltre non è volatile),
presente sulla scheda madre, che contiene le istruzioni che la CPU deve caricare per consentire l'avvio del
sistema e le routine di base che prendono il nome di BIOS (Basic I/O System).
EPROM
Acronimo per "erasable programmable read only memory", ovvero "ROM cancellabile e programmabile",
che è una memoria in sola lettura, ma ha la particolarità di poter essere cancellata in particolari
condizioni. Le EPROM si cancellano tramite l'esposizione ai raggi UV, mentre le EEPROM "electrically
erasable programmable read only memory" si cancellano tramite un impulso elettrico.
MRAM
Acronimo per "magnetoresistive ram", ovvero "RAM magnetoresistiva", è una memoria ad accesso
casuale di "nuova generazione", che utilizza le proprietà del magnetismo, al posto di una serie di impulsi
elettrici, per conservare le informazioni.
MEMORIA SECONDRIA

La memoria secondaria, chiamata anche memoria ausiliaria o memoria di massa, è un'unità che si
aggiunge alla memoria primaria (o centrale) dell'elaboratore per accrescerne le capacità di
memorizzazione. Consiste in una classe di dispositivi che non sono posti a diretto contatto con
il processore. Di conseguenza i dati in essi contenuti non vengono persi una volta spento il processore
stesso.
Algebra di Boole – Cenni Storici -
In matematica e logica matematica l'algebra di Boole è il ramo dell'algebra in cui le variabili (contenitore
di dati situato in una porzione di memoria) possono assumere solamente i valori vero e falso (valori di
verità), generalmente denotati come 1 e 0 rispettivamente. Le operazioni fondamentali non sono
addizione e sottrazione ma gli operatori logici: la congiunzione o prodotto logico indicata con ∧ oppure
AND ; la disgiunzione o somma logica indicata con ∨ oppure OR; la negazione o complementazione
indicata con ▬ oppure NOT.
Con tale formalismo si possono descrivere le relazioni logiche in modo simile a quanto fa l'algebra
ordinaria con le relazioni numeriche: la combinazione di AND, OR e NOT permette di sviluppare
qualsiasi funzione booleana e i tre operatori logici formano pertanto un insieme funzionalmente
completo.
Riassumendo:
• Contempla due costanti 0 e 1 (falso e vero) che corrispondono a due stati che si escludono a vicenda;
• Possono descrivere lo stato di apertura o chiusura di un generico contatto o di un circuito a più
   contatti;
• Sui valori booleani si definiscono le operazioni AND, OR, NOT.

Nella valutazione delle espressioni booleane esiste una relazione di precedenza fra gli operatori NOT,
AND e OR, nell’ordine in cui sono stati elencati. Gli operatori dell’algebra boolena possono essere
rappresentati in vari modi:
• Spesso son descritti semplicemente come AND, OR e NOT;
• Nella descrizione dei circuiti appaiono sotto forma di porte logiche;
• In matematica si usano + per OR e x per AND, mentre si rappresenta il NOT con una barra posta sopra
   l’espressione negata.
Il valore della somma logica (OR) è pari a 1 se almeno uno degli operandi è uguale a 1.
Il valore del prodotto logico (AND) è pari a 1 se tutti gli operandi sono ugual1 a 1.
Il valore della negazione (NOT) inverte il valore della costante su cui opera.
VARIABILI BINARIE:
Una variabile binaria indipendente può assumere uno dei due valori 0 e 1.

Date n variabili binarie indipendenti, la loro somma logica (OR) è :
Date n variabili binarie indipendenti, il loro prodotto logico (AND) è :

La negazione di una variabile x è :

L’elemento x = NOT(x
                   x) viene detto complemento di x ; il complemento è unico.
L’algebra di Boole è dotata di proprietà matematiche elencate di seguito.
  Per gli operatori AND e OR valgono:

                                         OR                                             AND

ASSOCIATIVA :                x1+x
                                x2+x
                                   x3 = x1+(x
                                            x2+x
                                               x1)                            x1xx
                                                                                 x2xx
                                                                                    x3 = x1x(x
                                                                                             x2xx
                                                                                                x1)

DISTRIBUTIVA :              x1+(x
                                x2xx
                                   x3) = (x
                                          x1+x
                                             x2)x(x
                                                  x1+x
                                                     x3) x1x(x
                                                             x2+x
                                                                x3) = (x
                                                                       x1xx
                                                                          x2)+(x
                                                                               x1xx
                                                                                  x3)

IDEMPOTENZA :               x+x
                              x=x                                             xxx
                                                                                x=x

MINIMO E MASSIMO :          x+1 = 1                                           xx0 = 0

  Per l’operatore NOT valgono:

COMPLEMENTO : x+x
                x=1                                                    xxx
                                                                         x=0        x =x
                                                                                       x
SISTEMI DI NUMERAZIONE POSIZIONALI.

Un sistema di numerazione posizionale è definito da una successione di moltiplicatori (b1, b2, b3,….) che
corrispondono al rapporto tra il valore che una cifra assume in una data posizione e quello che assume
nella posizione successiva. In formula si può scrivere (limitandosi per semplicità a un numero di quattro
cifre):

          c4 c3 c2 c1 = c4 x (b3 x b2 x b1) + c3 x (b2 x b1) + c2 x b1 + c1

Quando i moltiplicatori sono tutti uguali questa formula si riduce a:

          c4 c3 c2 c1 = c4 x b3 + c3 x b2 + c2 x b + c1

Il numero b si dice base del sistema di numerazione. Il sistema più comunemente usato oggi al modo è
quello in base 10 : SISTEMA NUMERICO DECIMALE.

3456 = 3 x 103 + 4 x 102 + 5 x 101 + 6 x 100 = 3000 + 400 + 50 + 6
I sistemi di numerazione posizionali necessitano della cifra zero per segnare i posti "vuoti". Ad esempio il
numero 505 (5 centinaia, 0 decine, 5 unità) va scritto con uno zero nella posizione delle decine: se non si
mettesse lo zero, sarebbe il numero 55 (5 decine, 5 unità) .

Nei sistemi non posizionali invece non si usa lo zero perché l'uso di simboli diversi per unità, decine,
centinaia eccetera lo rende non necessario: in numeri romani 505 si scrive DV e non si può confondere con
55 che si scrive LV.

Nel campo dell'informatica, con l'avvento dei calcolatori digitali, si usano spesso sistemi di numerazione
posizionale in basi che sono potenze di 2:

          b=2: sistema numerico binario
          b=8: sistema numerico ottale
          b=16: sistema numerico esadecimale
INTERVALLO DI RAPPRESENTAZIONE

I metodi per rappresentare i numeri sono molteplici, diversi e basati su concetti differenti. Per
rappresentare un numero si usa una sequenza di cifre definita numerale. Il numerale che rappresenta un
certo numero lo usiamo concretamente per comunicare quel numero o eseguirci dei calcoli. Il numero 12
(numerale) può essere rappresentato:
• 12 usando il sistema decimale (posizionale);
• XII usando le cifre romane (additivo);
• 1010 usando il sistema binario (posizionale a cifre binarie 0 e 1 e numerale di quattro cifre);
Con n cifre in base B vengono rappresentati tutti i numeri interi positivi da 0 a Bn-1 (Bn numeri distinti).

                                      ESEMPIO 1:
                                      BASE 10 ; 2 CIFRE

                                      ESEMPIO 2:
                                      BASE 2 ; 2 CIFRE
IL SISTEMA BINARIO

    Il sistema numerico binario è un sistema numerico posizionale in base 2. Esso utilizza solo due simboli, di
    solito indicati con 0 e 1 (* bit), invece delle dieci cifre utilizzate dal sistema numerico decimale. Ciascuno
    dei numeri espressi nel sistema numerico binario è definito "numero binario".
    In informatica il sistema binario è utilizzato per la rappresentazione interna dell'informazione dalla quasi
    totalità degli elaboratori elettronici, in quanto le caratteristiche fisiche dei circuiti digitali rendono molto
    conveniente la gestione di due soli valori, rappresentati fisicamente da due diversi livelli di tensione
    elettrica. Tali valori assumono convenzionalmente il significato numerico di 0 e 1 o quelli di vero e
    falso della logica booleana

* dall'inglese binary digit
Un byte è un insieme di 8 bit, (numerale a 8 cifre)

                                    b7b6b5b4b3b2b1b0

Con un byte si rappresentano i numeri interi fra 0 e 28−1 = 255

                                                 00000000
                                                 00000001
                                                 00000010
                                                 00000011
                                                 ……………                28 = 256 valori distinti
                                                 11111110
                                                 11111111

È l’elemento base (byte) con cui si rappresentano i dati nei calcolatori. Si utilizzano sempre dimensioni
multiple (di potenze del 2) del byte : 2 byte (16 bit), 4 byte (32 bit), 8 byte (64 bit), 16 byte (128 bit), ecc.
CONVERTIRE NUMERI DA SISTEMA DECIMALE A SISTEMA BINARIO (numero intero):

Si divide ripetutamente il numero intero decimale per 2 fino ad ottenere un quoziente nullo; le cifre del
numero binario sono i resti delle divisioni. La cifra più significativa è l’ultimo resto.

ESEMPIO: Convertire in binario il numero (88)10

                                             88   :   2   =    44   resto     0
                                             44   :   2   =    22   resto     0
                                             22   :   2   =    11   resto     0
                                             11   :   2   =     5   resto     1
                                              5   :   2   =     2   resto     1
                                              2   :   2   =     1   resto     0
                                              1   :   2   =     0   resto     1

                                                       1011000

                                   (88)10 = (1011000)2
CONVERTIRE NUMERI DA SISTEMA DECIMALE A SISTEMA BINARIO (numero razionale):

Si moltiplica ripetutamente il numero frazionario decimale per 2 fino ad ottenere una parte decimale nulla
o, dato che la condizione potrebbe non verificarsi mai, per un numero prefissato di volte; le cifre del
numero binario sono le parti intere dei prodotti successivi. La cifra più significativa è il risultato della
prima moltiplicazione.

ESEMPIO: Convertire in binario il numero (0,21875)10

                                       0,21875      x   2   = 0,437 resto            0
                                        0,4375      x   2   =     5 resto            0
                                         0,875      x   2   = 0,875 resto            1
                                          0,75      x   2   = 1,75 resto             1
                                           0,5      x   2   = 1,50 resto             1
                                                                  1

                                                         0,00111

                                              (0,21875)10 = (0,00111)2
CONVERTIRE NUMERI DA SISTEMA BINARIO A SISTEMA DECIMALE:

   Oltre all’espansione esplicita in potenze del 2 (forma polinomia) si può operare raddoppiando il bit più
   significativo e lo si aggiunge al secondo bit; si raddoppia la somma e si aggiunge al terzo bit e così via fino
   al bit meno significativo.

   ESEMPIO: Convertire in decimale il numero (1011000)2

(1011000)2 = 1x26 + 0x25 + 1x24 + 1x23 + 0x22 + 0x01 + 0x00 = 64 + 0 + 16 + 8 + 0 + 0 =
                                       (88)10

                                         1    x   2   =    2    somma         0
                                         2    x   2   =    4    somma         1
                                         5    x   2   =   10    somma         1
                                        11    x   2   =   22    somma         0
                                        22    x   2   =   44    somma         0
                                        44    x   2   =   88    somma         0

                                             (1011000)2 = (88)10
SISTEMA ESADECIMALE:

Il sistema numerico esadecimale (spesso abbreviato come esa o hex) è un sistema numerico posizionale in base
16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l'esadecimale si
usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un
totale di 16 simboli.
                                  DECIMALE             ESADECIMALE                  BINARIO
                                      0                     0                         0000
                                      1                     1                         0001
                                      2                     2                         0010
                                      3                     3                         0011
                                      4                     4                         0100
                                      5                     5                         0101
                                      6                     6                         0110
                                      7                     7                         0111
                                      8                     8                         1000
                                      9                     9                         1001
                                     10                     A                         1010
                                     11                     B                         1011
                                     12                     C                         1100
                                     13                     D                         1101
                                     14                     E                         1110
                                     15                     F                         1111
Il sistema esadecimale è molto usato in informatica, per la sua relazione diretta tra una cifra esadecimale
   e quattro cifre binarie. È spesso usato come intermediario, oppure come sistema numerico a sé stante. Per
   esempio, è possibile esprimere un byte con esattamente due cifre esadecimali (invece che con tre
   decimali). È interessante, infatti, notare come ogni cifra esadecimale corrisponda a un nibble, cioè a un
   numero binario di quattro cifre.

   ESEMPIO: Convertire in decimale ed in binario il numero (3A2F)16

(3A2F)16 = 3x163 + 0x25 + 10x162 + 2x161 + 15x160 = 3x4096 + 10x256 + 2x16 + 15 x 1
                                     = (14985)10
                                 (3A2F)2 = (0011 1010 0010 1111)2

   DA NOTARE:
   • 160 = 1 (la base elevata a 0 è sempre uguale a 1);
   • La conversione da sistema hex a sistema bin e viceversa può essere svolta per sostituzione di gruppi di
      cifre invece che con algoritmi di divisione;
   • È possibile esprimere il byte (8 bit) con due cifre esadecimali (invece che con tre decimali);
   • Per denotare un numero esadecimale esistono diversi metodi, dipendenti fondamentalmente dai
      linguaggi di programmazione: 16#3A2F – 0x3A2F - $3A2F3 - &h3A2F – 3A2F16 .

                                     (255)10 = (1111 1111)2 = (FF)16
RAPPRESENTAZIONE DEI DATI E ARITMETICA DEGLI ELABORATORI.

I Numeri Interi Positivi sono rappresentati all’interno dell’elaboratore utilizzando un multiplo del byte
(generalmente 8 byte); qualora l’intero dovesse essere rappresentato con un numero di cifre minore,
vengono aggiunti zeri nelle cifre più significative (1210 viene rappresentato in byte come 00001100).
Per rappresentare numeri con segno occorre utilizzare un bit per definire il segno del numero: si possono
usare tre tecniche di codifica:

   Modulo e segno;
   Complemento a 2;
   Complemento a 1.
MODULO E SEGNO:

Il bit più significativo rappresenta il segno: 0 per i numeri positivi e 1 per i numeri negativi. Da notare che
esiste uno zero positivo (00….0) e uno zero negativo (10….0).
Se si utilizzano n bit si rappresentano tutti i numeri compresi fra –(2 n-1 -1) e 2n-1 -1.

Con 4 bit si rappresenta –(2 4-1 -1) e 24-1 -1 -(8-1) e (8-1) -7 e 7 .

                                   +0    0 000                    -0     1 000
                                   +1    0 001                    -1     1 001
                                   +2    0 010                    -2     1 010
                                   +3    0 011                    -3     1 011
                                   +4    0 100                    -4     1 100
                                   +5    0 101                    -5     1 101
                                   +6    0 110                    -6     1 110
                                   +7    0 111                    -7     1 111
COMPLEMENTO A DUE:

Il bit più significativo del numero ha peso negativo o positivo; da questo deriva che tutti i numeri che
cominciano con un "1" sono numeri binari negativi, mentre tutti i numeri che cominciano con uno "0"
sono numeri binari positivi. Se si utilizzano n bit si rappresentano tutti i numeri compresi fra –2n-1 e 2n-1 -
1.

Con 4 bit si rappresenta –(2 4-1 ) e 24-1 -1 -(8) e (8-1) -8 e 7 .

                                   +0     0 000                      -1   1 111
                                   +1     0 001                      -2   1 110
                                   +2     0 010                      -3   1 101
                                   +3     0 011                      -4   1 100
                                   +4     0 100                      -5   1 011
                                   +5     0 101                      -6   1 010
                                   +6     0 110                      -7   1 001
                                   +7     0 111                      -8   1 000

E’ il metodo più diffuso per la rappresentazione dei numeri con segno in informatica. Questo metodo
consente di avere un'unica rappresentazione dello zero (quando tutti i bit sono zero, eliminando così la
ridondanza dello zero che si verifica con la rappresentazione in modulo e segno).
OPERAZIONI CON I NUMERI BINARI.

I numeri binari possono essere messi in relazione tramite operazioni aritmetiche, con regole simili a quelle
del sistema decimale. Le quattro operazioni aritmetiche eseguibili sono: addizione, sottrazione,
moltiplicazione e divisione. Per rendere possibili le operazioni aritmetiche e l'elaborazione dei segnali
digitali è necessario esprimere i numeri binari tenendo conto del loro segno.
ADDIZIONE :
L'addizione fra due o più numeri binari è analoga a quella riferita ai numeri decimali. La regola applicata
in questo caso è la seguente:

                                   0 + 0 = 0
                                     +
                                   0 + 1 = 1
                                     +
                                   1   0 = 1

                                   1       1 = 0     Con riporto di 1 alla colonna verso sinistra

Quando si ha un riporto si aggiunge 1 sulla colonna di sinistra (quella più significativa) e si procede
rispettando la regola della somma.
SOTTRAZIONE :
La sottrazione fra due o più numeri binari è analoga a quella riferita ai numeri decimali. La regola
applicata in questo caso è la seguente:

                                     0 - 0 = 0

                                     0 - 1 = 1         Con prestito di 1 alla colonna di sinistra

                                     1 - 0 = 1

                                     1 - 1 = 0

Quando si ha un prestito si sottrae 1 dalla colonna di sinistra (quella più significativa) e si procede
rispettando la regola della differenza. Se sulla colonna di sinistra non si può concedere il prestito perché la
cifra è 0, esso si trascina alla colonna successiva verso sinistra finché non si restituisce il prestito.
MOLTIPLICAZIONE :
La regola del prodotto binario segue esattamente quella della moltiplicazione di due numeri decimali.
Infatti si ha:

                                 0 x 0 = 0
                                   x
                                 0 x 1 = 0
                                   x
                                 1   0 = 0

                                 1      1 = 1
DIVISIONE :
L'operazione della divisione rispetta la regola:

          D=Qxd+R             (dove D è il dividendo, d il divisore, Q è il quoziente ed R è il resto).

Per eseguire una divisione si può procedere tramite il metodo tradizionale in cui si procede per sottrazioni
successive tra il dividendo  D e il divisore d fino a che il risultato diventi inferiore al divisore. Il risultato
finale rappresenta il resto R mentre il numero di sottrazioni rappresenta il quoziente Q.

                                      110111             101
                                       101               1010

                                            111
                                            101
                                               100
RAPPRESENTAZIONE DEI NUMERI.

I computer possono utilizzare due sistemi per rappresentare i numeri reali (che, ricordiamo, sono i numeri
interi e i numeri con decimali): virgola fissa e virgola mobile.
La rappresentazione a virgola fissa è molto semplice: un certo numero di byte verrà utilizzato per
rappresentare la parte intera (e il segno), sappiamo che dopo questo numero di byte ci sarà il punto
decimale (la virgola), segue quindi un altro numero di byte per rappresentare la parte decimale. Possiamo
esprimere una codifica in virgola fissa come

                                                 I.D

I numero intero che esprime la parte intera, D numero intero che esprime la parte decimale.
Stabiliamo noi, a priori, di quanti byte possono essere le due parti. In questi termini si capisce perchè la
“virgola è fissa” : si trova sempre nella stessa posizione.
Il termine numero in virgola mobile (in inglese floating point) indica il metodo di rappresentazione
approssimata dei numeri reali e di elaborazione dei dati usati dai processori per compiere operazioni
matematiche.
In informatica viene usata solitamente in base 2 e in questo caso può essere considerata l'analogo binario
della notazione scientifica in base 10.
L'uso di operazioni aritmetiche in virgola mobile è oggi il metodo più diffuso per la gestione di numeri
reali e della loro approssimazione razionale nella memoria dei computer.
La rappresentazione in virgola mobile è la seguente (secondo la normativa IEEE 754):

                                      n = - 1s x M x 2 (E-127)

In questa formula S è il Segno (che determina se il numero è negativo o positivo), M è la Mantissa,
che esprime la parte decimale del numero, il 2 rappresenta la Base ed infine tutto il valore (E-127) è
l’Esponente (il valore -127 si chiama Bias e serve per esprimere valori negativi, vedete che quando E
vale meno del bias, l’esponente è negativo ⇒ viene fuori un numero minore di 1)
La struttura di un numero in virgola mobile, secondo lo standard IEEE viene rappresentata su parole di 32,
    64 o 128 bit divisi in tre parti:
         • un bit di segno S;
         • un campo di esponente E;
         • un campo di mantissa M
    Gli n bit di una stringa sono indicizzati in modo decrescente con numeri interi da 0 a n-1. In un numero in
    questo standard, l'importanza del bit decresce col suo indice

                                                            1         8            23                Lunghezza in bit

Rappresentazione di un numero in una stringa di 32 bit

                                                      31        30         22                      0 Indice dei bit

                                                            1         11           52                Lunghezza in bit

Rappresentazione di un numero in una stringa di 64 bit

                                                      63        62         51                      0 Indice dei bit

                                                            1         15           112               Lunghezza in bit

Rappresentazione di un numero in una stringa di 128
bit
                                                      127       126        111                     0 Indice dei bit
La rappresentazione a 32 bit è detta precisione singola, quella a 64 bit è detta precisione doppia mentre
quella a 128 bit viene chiamata precisione quadrupla.

Proviamo a codificare il numero – 118,5 nel sistema IEEE 754 in precisione singola (32 bit).
Avremmo:

Il primo passo è determinare il segno, l’esponente e la mantissa.
Poiché è un numero negativo il primo bit è pari a 1, poi scriviamo il numero in forma binaria (118,5 =
1110110,1) spostando la virgola verso sinistra (1110110,1 = 1, 1101101 x 26).
La mantissa è la parte destra della virgola riempita con zeri a destra fino a riempire i 23 bit. L’esponente è
pari a 6, ma dobbiamo convertirlo in forma binaria ed adattarlo allo standard. Per la precisione singola
dobbiamo aggiungere 127 e trasformarlo in forma binaria (127+6=133=10000101).
Assembliamo il tutto

                                                 1       8                    23                 Lunghezza in
                                                                                                 bit
                               - 118, 5 =

                                               3 30           22                               0 Indice dei bit
                                               1
CONCETTI BASE DELLA PROGRAMMAZIONE

La programmazione, in informatica, è l'insieme delle attività e tecniche che una o più persone
specializzate, programmatori o sviluppatori (developer), svolgono per creare un programma, ossia
un software da far eseguire ad un computer, scrivendo il relativo codice sorgente in un
determinato linguaggio di programmazione. Con l'avvento dell'ingegneria del software l'attività di
programmazione rappresenta solo la fase implementativa dell'intero ciclo di sviluppo del software con
l'obiettivo ultimo di soddisfare le specifiche funzionali richieste dal committente secondo una predefinita
analisi di strutturazione. Con fondamenti di programmazione si indicano le conoscenze basilari che un
programmatore deve possedere per la programmazione in un qualunque linguaggio di programmazione.
Per la scrittura di righe di codice nei linguaggi di programmazione è sufficiente per un programmatore
utilizzare un normale elaboratore testi, o un programma ad hoc detto editor spesso compreso all'interno
di un ambiente di sviluppo integrato (IDE). Nel secondo caso il software individua automaticamente gli
errori più banali (es. errori di sintassi) che un programmatore può commettere.
I passi con cui si sviluppa un programma efficiente sono simili tra di loro per quasi tutti i contesti di
programmazione (aziende, hobby, lavoro, ecc.). Le prime fasi sono strettamente legate alla logica di quello
che si va a creare e del suo funzionamento, mentre le ultime sono orientate verso lo specifico linguaggio
di programmazione che si intende utilizzare.
La prima operazione da svolgere per la creazione di un qualunque programma è definire nel modo più
preciso ed accurato possibile quale problema intendiamo risolvere. Questo vale sia per una
semplice funzione matematica che per un complesso database. L'input che il programma riceve è legato
all'output che intendiamo restituire dopo l'elaborazione. Questa fase può presentare una grande
complessità dovuta al lavoro astratto che impone al programmatore di immaginare il risultato finale e la
sua formalizzazione.
È importante precisare che la lista di passi deve contenere istruzioni chiare, precise e non ambigue,
ovvero il cui significato non dipenda dal contesto in cui lo si scrive, ma sia chiaramente identificabile.
I programmi informatici risultano essere molto più articolati di un processo lineare come l'addizione di due
numeri. Per dare al programma una struttura più complessa si utilizzano i seguenti strumenti:
• Le diramazioni consistono nel fornire al codice delle funzioni che possono cambiare lo svolgimento
    dell'algoritmo a seconda del risultato della condizione espressa.
• I cicli sono sequenze di istruzioni eseguite ripetutamente fin quando non viene soddisfatta una
    determinata condizione. Ogni ripetizione è detta iterazione.
Paradigma di programmazione.
E’ uno stile fondamentale di programmazione, ovvero un insieme di strumenti concettuali forniti da
un linguaggio di programmazione per la stesura del codice sorgente di un programma, definendo dunque
il modo in cui il programmatore concepisce e percepisce il programma stesso. Diversi paradigmi si
differenziano per i concetti e le astrazioni usate per rappresentare gli elementi di un programma (come ad
esempio le funzioni, gli oggetti, le variabili, vincoli, ecc.) e per i procedimenti usati per l'esecuzione delle
procedure di elaborazione dei dati (assegnazione, calcolo, iterazione, ecc).
I linguaggi di programmazione                sono    molti    e   si   distinguono     principalmente         in   due
categorie: interpretati e compilati.

I linguaggi interpretati più diffusi sono:
•JavaScript, Java, Python, BASIC, script di shell, script in uso su Internet (Jscript, VBScript, Batch...);

I linguaggi compilati più famosi sono:
•C, C++ (linguaggio orientato agli oggetti derivato dal C), Pascal (solitamente usato a scopo didattico).

Il codice di un programma interpretato viene salvato così com'è, e viene poi letto da un interprete, che è
un programma che gira sul sistema operativo in uso.
I linguaggi di programmazione compilati richiedono invece che il codice, una volta terminato, sia
processato da un compilatore che, convertendolo in linguaggio macchina, ne permetta l'esecuzione da
parte della CPU.
PRO E CONTRO.

I linguaggi interpretati sono più lenti ma più facili da creare e girano su molti sistemi operativi, a patto di
avere lo stesso interprete, e che il dialetto del linguaggio sia comune. Un programma interpretato, in
esecuzione, richiede più memoria ed è meno veloce, a causa dell'overhead introdotto dall'interprete
stesso. Durante l'esecuzione, l'interprete deve infatti analizzare le istruzioni a partire dal livello sintattico,
identificare le azioni da eseguire (eventualmente trasformando i nomi simbolici delle variabili coinvolte
nei corrispondenti indirizzi di memoria), ed eseguirle.

I linguaggi compilati, molto spesso, hanno invece degli standard ISO, o comunque regole universali, le
quali permettono di compilare un programma senza modifiche su più architetture hardware. Le istruzioni
del codice compilato, già in linguaggio macchina, vengono caricate e istantaneamente eseguite
dal processore.
BUG E DEBUGGING.

Completato il programma è frequente la presenza di errori di programmazione derivanti da ragioni varie
che possono evidenziarsi durante lo sviluppo e l'esecuzione di un codice. Questi errori possono essere
essenzialmente in tre principali categorie: errori di sintassi, errori di logica ed errori di runtime. Tutti
questi errori vanno necessariamente eliminati pena il malfunzionamento o il blocco dell'esecuzione del
programma stesso.
ERRORI DI SINTASSI.

Sono gli errori che si commettono nella fase di scrittura del programma nel linguaggio scelto. Sono In
genere errori di ortografia nella scrittura del codice o nella sintassi delle istruzioni. Gli errori di sintassi
impediscono la compilazione del programma da parte del compilatore che quindi tipicamente segnalerà
la presenza dell'errore.
ERRORI DI LOGICA (SEMANTICA).

Sono gli errori che si commettono nella fase di progettazione dell'algoritmo: possono essere causati da
una mancata comprensione del problema da calcolare o dei vincoli che i dati in input devono rispettare,
o ancora nella valutazione del test dell'algoritmo. Questi errori conducono tipicamente alla progettazione
di un algoritmo che non fornisce l'output richiesto nell'ambito di una o più istanze del problema da
risolvere. Sono difficili da individuare e spesso si deve ricorrere al debugging.
ERRORI DI RUNTIME

Sono errori che possono verificarsi nella fase di esecuzione del programma, anche se l'algoritmo è
corretto e il codice viene compilato correttamente. Spesso sono relativi all'utilizzo della memoria da parte
del programma stesso, che tenta ad esempio di scrivere ad una locazione di memoria alla quale non ha
accesso. Questi errori si verificano principalmente nell'utilizzo dei puntatori.
La verifica e la messa a punto del programma ha lo scopo di ricercare e correggere gli errori riscontrati. Si
tratta di una fase molto lunga ed importante in cui il programmatore verifica la bontà del proprio lavoro.
La correzione di un bug potrebbe essere causa di nuovi errori ed occorre quindi prestare la massima
attenzione.
TIPI DI DATO

Un tipo di dato è un nome che indica l'insieme di valori che una variabile, o il risultato di un'espressione,
possono assumere e le operazioni che su tali valori si possono effettuare. Dire per esempio che la variabile
X è di tipo "numero intero" significa affermare che X può assumere come valori solo numeri
interi (appartenenti ad un certo intervallo) e che su tali valori sono ammesse solo certe operazioni (ad
esempio le operazioni aritmetiche elementari).

 Ogni linguaggio di programmazione consente di usare, in modo più o meno esplicito, un certo numero di
 tipi di dati predefiniti di uso generale, e di solito fornisce strumenti per definire nuovi tipi sulla base delle
 necessità specifiche. Può anche accadere che sia utile o necessario "tradurre" una variabile di un certo
 tipo in una variabile di un altro tipo (l'operazione è detta type casting): alcuni linguaggi mettono a
 disposizione costrutti sintattici per questo scopo, ma in altri casi è necessario scrivere una funzione che
 associ i valori di un tipo a quelli dell'altro
Esempio tipi di dato
BOOLEANI (BOOL).

Il tipo booleano ha due soli valori: true ("vero") e false ("falso"). Essi vengono utilizzati in modo speciale
nelle espressioni condizionali per controllare il flusso di esecuzione e possono essere manipolati con
gli operatori booleani AND, OR, NOT e così via.
Anche se in teoria basterebbe un solo bit per memorizzare un valore booleano, per motivi di efficienza si
usa in genere un'intera parola di memoria, come per i numeri interi "piccoli" (una parola di memoria a 8
bit, per esempio, può memorizzare numeri da 0 a 255, ma il tipo booleano utilizza solo i valori 0 e 1).

                                          A : bool ;
                                          B : bool ;
                                     C : bool := false;
                                   A := B AND NOT C;
NUMERI.

I tipi di dati numerici includono i numeri interi e i numeri razionali in virgola mobile, che sono astrazioni
dei corrispondenti insiemi di numeri della matematica. Quasi tutti i linguaggi includono tipi di dati
numerici come tipi predefiniti e forniscono un certo numero di operatori aritmetici e di confronto su di
essi.
A differenza degli insiemi numerici della matematica, i tipi di dati numerici sono spesso limitati (includono
cioè un massimo e un minimo numero rappresentabile), dovendo essere contenuti in una singola parola
(word) di memoria.

                                          A : INT ;
                                         B : REAL ;
                                         C :LREAL;
                                          D :UINT;
                                          ecc. ecc.
CARATTERI E STRINGHE.

Il tipo carattere contiene un carattere, generalmente ASCII, memorizzato in un byte.
Tuttavia in questi anni si sta affermando il nuovo standard Unicode per i caratteri, che prevede 16 bit (che
generalmente corrisponde a una parola di memoria) per la rappresentazione di un singolo carattere. Molti
linguaggi tradizionali si sono adattati a questo standard emergente introducendo, in aggiunta al tipo
"carattere a 8 bit", un nuovo tipo "carattere a 16 bit", talvolta detto wide char.
Le stringhe sono sequenze di caratteri di lunghezza finita. I linguaggi possono fornire operazioni per
la concatenazione di stringhe, la selezione di sottostringhe di una stringa data, ecc.
ENUMERAZIONI.

Sono insiemi finiti di identificatori, generalmente specificati dal programmatore.
Una variabile di tipo "Color" potrà in tal caso assumere solo i valori "RED", "GREEN" e "BLUE". Rispetto alle
tecniche tradizionali per gestire analoghi generi di dati, che prevedevano semplicemente di adottare una
convenzione numerica implicita (per esempio scrivo "1" per intendere "rosso", "2" per intendere "verde" e
così via), i tipi enumerati forniscono una maggiore leggibilità e una migliore astrazione sui dati.

                                       enum color {RED, GREEN, BLUE};
ARRAY.

  Sono insiemi finiti di identificatori, generalmente specificati dal programmatore. Un array o vettore indica
  una struttura dati complessa, statica e omogenea. Gli array, presenti praticamente in tutti i linguaggi di
  programmazione, sono ispirati alla nozione matematica di vettore (quando monodimensionali) o
  di matrice (nel caso di array bidimensionali). L'array è in genere classificato come un costruttore di tipo: in
  altre parole, esso consente di definire nuovi tipi di dati a partire da tipi preesistenti, attraverso
  l'aggregazione di diversi oggetti tutti di uno stesso tipo. Ciascun oggetto componente è individuato
  attraverso un indice intero, nel caso monodimensionale, o attraverso D indici interi nel caso D-
  dimensionale. Si può immaginare un array come una sorta di contenitore, le cui caselle sono
  dette celle (o elementi) dell'array stesso. Ciascuna delle celle si comporta come una variabile tradizionale;
  tutte le celle sono variabili di uno stesso tipo preesistente, detto tipo base dell'array. Si parlerà perciò di
  tipi come "array di interi", "array di stringhe", "array di caratteri" e così via. Quello che si ottiene
  dichiarandolo è dunque un contenitore statico ed omogeneo di valori, variabili o oggetti. In alcuni
  linguaggi, la dimensione dell'array (ovvero il numero celle di cui esso è composto) viene considerato parte
  della definizione del tipo array. Ciascuna delle celle dell'array è identificata da un valore di indice. L'indice
  è generalmente numerico e i valori che gli indici possono assumere sono numeri interi contigui che
  partono da 0 o da 1 o, più raramente, da un valore arbitrario. Si potrà quindi parlare della cella di indice 0,
  di indice 1, e, in generale, di indice N, dove N è un intero compreso fra 0 (o 1) e il valore massimo per gli
  indici dell'array.

Int Vettore[10]; /* definisce la variabile di nome Vettore come array di 10 elementi interi*/
Vettore [0] = 0; /*assegna il valore 0 alla cella di indice 0*/
Vettore [1] = 0;
…….ecc
OPPURE           Vettore : Array[0..9] of INT; //definisce la variabile di nome Vettore come array di 10 elementi interi
CONCETTO DI VARIABILE.

Una variabile è un contenitore di dati situato in una porzione di memoria (una o più locazioni di memoria)
destinata a contenere valori, suscettibili di modifica nel corso dell'esecuzione di un programma. Una
variabile è caratterizzata da un nome (inteso solitamente come una sequenza di caratteri e cifre).
Nei linguaggi compilati, le variabili devono essere definite ovvero dichiarate in maniera tipizzata prima di
essere adoperate. La dichiarazione consente di raggiungere due fondamentali obiettivi: da un lato, con la
dichiarazione tipizzata si specifica il tipo della variabile, cosicché il compilatore è in grado di verificare
eventuali errori semantici presenti all'interno di un programma sintatticamente corretto (ad esempio,
non è consentito moltiplicare tra loro una variabile stringa ed una variabile intera). Dall'altro, viene
valutata e definita la quantità di memoria destinata, in fase di esecuzione, a contenere i dati a cui la
variabile si riferisce.
Le operazioni basilari che possono essere compiute su una variabile sono la lettura del valore in essa
contenuto e la scrittura di un nuovo valore, o assegnamento. Il primo assegnamento della variabile è
detto inizializzazione. Molti linguaggi richiedono o preferiscono che la variabile una volta dichiarata venga
anche inizializzata a un valore arbitrario.
CONCETTO DI COSTANTE.

Una costante è un dato non modificabile situato in una porzione di memoria (una o più locazioni di
memoria) destinata a contenere un valore, che non può essere appunto modificato nel corso
dell'esecuzione di un programma. Una costante può essere caratterizzata da un nome (inteso solitamente
come una sequenza di caratteri e cifre).
Nei linguaggi tipizzati, ciascuna variabile è caratterizzata da un tipo di dato, che specifica come deve essere
considerato il dato rappresentato, e possibilmente restringe i valori accettabili. Ad esempio, una variabile
destinata a contenere il numero progressivo di un mese di una data, potrà assumere solo i valori interi da 1
a 12.
L'insieme delle variabili esistenti a tempo di esecuzione è contenuto all'interno dell'ambiente
VISIBILITA’ DI UNA VARIABILE

Il contesto in cui una variabile viene dichiarata all'interno di un programma determina la sua visibilità.

Col termine variabili globali vengono generalmente indicate quelle variabili dichiarate al di fuori di un
sottoblocco di programma e che sono visibili in uno o più sottoblocchi.

Le variabili locali sono quelle definite all'interno di un sottoblocco, ad esempio all'interno di una funzione,
e quindi visibili solo internamente al sottoblocco stesso.
Puoi anche leggere