Skillbook Logo
foto profilo

Tutte le categorie


Competenze per programmare: la rappresentazione digitale dei numeri interi e decimali

Gino Visciano | Skill Factory - 24/03/2024 21:11:45 | in Tutorials

I numeri che usiamo si chiamano "Numeri reali", in base alle loro caratteristiche li possiamo organizzare nei seguenti insiemi:

I numeri, sia interi (relativi), sia decimali (razionali), servono per esprimere rispettivamente quantità intere o frazionarie.

Sono irrazionali i numeri che non si possono indicare attraverso il rapporto tra numeri interi, come ad esempio il pi greco, che indica il rapporto tra la misura della circonferenza di un cerchio e il suo diametro oppure il numero di Nepero (e).

In programmazione per indicare la parte decimale di un numero si usa il punto "." al posto della virgola ",", quindi negli esempi userò questa convenzione.

Esempio 1

Per indicare la quantità di auto nell'immagine seguente, basta usare il numero intero 9:

mentre per indicare la quantità di auto nell'immagine seguente, bisogna usare il numero decimale 8.5, perché l'ultima auto è divisa a metà:

 

Esempio 2

Il risultato dell'espressione 10/2 è 5 che è un numero intero, perché il numero 10 può essere diviso esattamente in due parti intere, ciascuna composta da 5 unità.

Il risultato dell'espressione 10/3 è 3.33333 che è un numero decimale, perché il numero 10 può essere diviso in 3 parti intere, ciascuna composta da 3 unità, ma ne resta una che deve essere frazionata in 3 parti decimali da 0.33333.

Attenti, quando la quantità di cifre decimali di un numero è indefinita, ovvero quando l'unità non è divisibile in parti esattamente uguali, come nel caso del riusultato della divisione 10/3 = 3.33333..., il numero può essere scritto nel modo seguente:

e si legge 3.3 periodico, perché il numero di 3 della parte decimale potrebbe essere infinito.

In programmazione, quando il numero di decimali è periodico, bisogna indicare la precisione del numero ovvero il numero di cifre da indicare dopo la virgola, per questo motivo nei linguaggi di programmazione si fa la distinzione tra numeri decimali a singola precisione (float) e doppia precisione (double). Di solito i numeri a doppia precisione si usano in ambiti scientifici, quelli a singola precisione per tutti gli altri ambiti.

Esempio 3 

I numeri si possono anche rappresentare sugli assi cartesiani, come mostra l'immagine seguente:

Se l'asse cartesiano è orizzontale si chiama asse delle ascisse e si indica con la lettera X, mentre se è verticale si chiama asse delle ordinate e si indica con la lettera Y.

Un piano su cui si disegna sia l'asse delle "Ascisse", sia l'asse delle "Ordinate" viene detto "Piano Cartesiano".

Il numero 0, si trova nel punto in cui gli assi X e Y s'incontrano e viene chiamato origine. Lo zero divide i numeri positivi (segno +) da quelli negativi (segno -) di entrambi gli assi; sia i numeri positivi, sia i numeri negativi sono infiniti.

Attenti, quando scrivete un numero positivo, non siete obbligati ad indicare il segno +, mentre quando scrivete un numero negativo il segno - è obbligatorio.

Sugli assi cartesiani, la parte decimale di un numero è sempre compresa nel segmento che unisce due numeri interi consecutivi. 

L'immagine seguente mostra la posizione del numero 2.5 sull'asse X:

Ricordate che il punto centrale di un segmento che lo divide in due parti uguali è detto punto medio.

L'immagine seguente mostra la posizione del il numero -3.2 sull'asse X:

Per indicare la parte decimale 0.2 dovete posizionarvi esattamente nel punto che corrisponde alla quinta parte del segmento, perché 1/5=0.2, come mostra l'immagine.

Come ci ha insegnato il filosofo greco Democrito, un segmento può essere diviso infinite volte, per questo motivo la quantità di cifre decimali di un numero può anche essere molto grande; maggiore è il numero di decimali, tanto maggiore è il numero di volte che vengono divise le parti del segmento. La precisione, ovvero la quantità di cifre decimali di un numero, serve per capire fino a quando dobbiamo continuare  dividere le parti del segmento, per evitare di continuare all'infinito.  

In che modo i computer memorizzano i numeri interi?

I computer sono macchine elettroniche di tipo digitale, a differenza degli uomini, per scrivere i numeri possono usare solo due cifre: 0 e 1 chiamate bit (binary digit), per questo motivo usano il sistema di numerazione binario.  

I computer memorizzano i numeri nella RAM (Random Access Memory); la memoria ad accesso casuale composta da tanti interruttori, chiamati flip-flop, che permettono di scrivere i numeri in forma binaria - se l'interruttore spento (-) la cifra è zero, se è acceso (+) la cifra è uno. 

    

Clicca qui per conoscere la differenza tra mondo reale e mondo digitale.

Nei linguaggi di programmazione le variabili oppure gli oggetti che possono contenere tipi interi si dichiarano con: int oppure Integer, ad esempio:

int x=10;

Integer y=20;

In SQL le colonne di una tabella che possono contenere numeri interi di dichiarano con la parola chiave numeric, ad esempio:

create table magazzino(id numeric(7), quantita numeric(7),...);

Quando un computer memorizza nella RAM un numero intero, usa il primo bit a sinistra (quello più significativo) per indicare il segno; se il primo bit più significativo è 0 il numero intero è positivo, altrimenti è negativo. Gli altri bit servono per indicare il modulo del numero intero.

Per i numeri positivi, il modulo è rappresentato semplicemente dal valore binario del numero da memorizzare.

Per i numeri negativi, il modulo è rappresentato in complemento a 2.

Ad esempio, se il computer usa 32 bit (4 byte) per memorizzare un numero intero con il segno (int signed), con 4 byte si può scrivere qualunque numero intero, negativo o positivo, compreso nell'intervallo: –2.147.483.648 e 2.147.483.647.

2.147.483.647 = [0](segno)[1111111 11111111 11111111 11111111](modulo = valore binario del numero 2147483647)

–2.147.483.648  = [1](segno)[00000000 00000000 00000000 00000000](modulo = complemento a 2 del numero 2147483648)

Complemento a 2

Per calcolare il complemento a 2 di un numero binario è semplice, basta invertire i valori dei bit, gli zeri diventano uno e gli uno diventano zero e aggiungere 1 al numero che si ottiene.

Ad esempio, il complemento a 2 binario del numero 10 (decimale) si calcola nel modo seguente:

1) converto il numero 10 decimale in binario:

10 (decimale) = 1010 (binario)

2) Calcolo il complemento a 1 del numero 1010 invertendo gli zeri con uno e gli uno con zero:

1010 (binario) = 0101 (complemento a 1)

3) aggiungo 1 al numero 0101:

0101+
0001=
---------
 0110 (Complemento a 2 del numero binario 1010)

Allo stesso modo possiamo calcolare il complemento a 2 del numero decimale 2.147.483.648:

1) converto il numero 2.147.483.648 decimale in binario:

2.147.483.648 (decimale) = 10000000 00000000 00000000 00000000  (binario)

2) Calcolo il complemento a 1 del numero 10000000 00000000 00000000 00000000  invertendo gli zeri con uno e gli uno con zero:

10000000 00000000 00000000 00000000  (binario) = 01111111 11111111 11111111 11111111 (complemento a 1)

3) aggiungo 1 al numero 01111111 11111111 11111111 11111111:

01111111111111111111111111111111+
00000000000000000000000000000001=
-----------------------------------------------------------
10000000000000000000000000000000 (Complemento a 2 del numero binario 01111111
111111111111111111111111)

Attenti, nella rappresentazione dei computer a 32 bit, giacché l'ultimo bit serve per il segno, vengono memorizzati solo i primi 31 bit.
 
In che modo i computer memorizzano i numeri decimali?
I numeri decimali possono essere a virgola fissa oppure a virgola mobile. In quelli a virgola fissa le quantità di decimali dopo la virgola è predefinita, quindi la posizione della virgola non cambia, mentre per quelli a virgola mobile la quantità di decimali può variare, quindi la posizione della virgola più cambiare.
 
Nei linguaggi di programmazione i tipi float e double indicano numeri decimali a virgola mobile, la differenza è la precisione, i double hanno un maggior numero di decimali dopo la virgola rispetto ai float. Il tipo decimal usato in SQL per impostare le colonne con numeri decimali è a virgola fissa. La parola chiave decimal permette di specificare sia la quantità di cifre totali che compongono il numero, sia quanti sono quelli decimali, ad esempio:
create table dipendenti (
...
stipendio decimal(9,2),
...)
 

La rappresentazione nei computer a virgola fissa è molto semplice: il byte più significativo rappresenta il segno, un certo numero di byte viene utilizzato per rappresentare la parte intera, segue quindi un altro numero di byte per rappresentare la parte decimale, come mostra l'immagine seguente:

Ad esempio, convertiamo in binario il numero decimale 17,55, immaginando di avere 16 bit a disposizione:

1) Il bit più significativo è uguale a 0, perché il numero è positivo.
2) La parte intera, immaginiamola di 7 bit, è uguale a:

2^6=64 -> 0
2^5=32 -> 0
2^4=16 -> 1
2^3=8 -> 0
2^2=4 -> 0
2^1=2 -> 0
2^0=1 -> 1

17 (decimale) = 0010001 (binario)

Se la parte intera fosse stata negativa avremmo dovuto calcolare il complemento a 2.

3) La parte decimale, immaginandola di 8 bit, è uguale a:

2^-1=0.5 -> 1
2^-2=0.25 -> 0
2^-3=0.125 -> 0
2^-4=0.0625 -> 0
2^-5=0.03125 -> 1
2^-6=0,015625 -> 1
2^-7=0,0078125 -> 0
2^-8=0,00390625 -> 0

0.55 (decimale) = 10001100 (binario)

Quindi

17.55 (decimale) =0(segno) 0010001.10001100

Ricordate che il simbolo ^ indica la potenza.
 
Per la rappresentazione dei numeri decimali in virgola mobile i computer usano lo standard IEEE 754 con il quale si definiscono due formati: uno per la precisione singola a 32 bit e l'altro per la precisione doppia a 64 bit.
 
Questo standard segue la notazione scientifica e permette al computer di memorizzare i numeri decimali attraverso tre tipi d'informazioni:
 
 
I bit per la precisione singola hanno la seguente organizzazione:

bit 31 (1) segno
bit 23-30 (8) esponente
bit 0-22 (23) mantissa

mentre per la precisione doppia l'organizzazione è la seguente:

bit 63 (1) segno
bit 52-62 (11) esponente
bit 0-51 (52) mantissa

Il numero viene composto in base alla formula seguente:
 
Numero = (-1)^segno*2^esponente*mantissa
 
Facciamo un esempio:
 
Rappresentiamo in virgola mobile a precisione singola il numero decimale 13.25:
 
1) Il bit più significativo è uguale a 0 perché il numero è positivo
2) Il modulo della parte intera 13 (decimale) è uguale a: 1101 (binario)
3) la parte decimale 0.25 è uguale a: 01 (binario)
 
Quindi
 
13.25 (decimale) = 1101.01 (binario)
 
Usando la notazione scientifica in base 2 lo riscrivo nella forma:
 
1.10101 * 2^3.
 
A questo punto ho tutte informazioni per ottenere il segno, l'esponente e la mantissa:
 
SEGNO=0
ESPONENTE=3+127=130 (decimale) = 10000010 (binario)
 
Per ottenere la mantissa basta prendere il numero 1.10101 ed escludere l'1 prima della virgola, quindi:
 
MANTISSA= 10101 (binario)
 
Il risultato finale è il seguente:
 

 INFORMATICA APPLICATA

Laboratorio

Creare un programma che trasforma i numeri interi nella rappresentazione binaria a 32 bit usata dai computer per memorizzare le informazioni numeriche.

Soluzione JavaScript


// Funzioni
function convertiBinario(numeroIntero){
    let numeroBinario=[]
    let resto
    while (numeroIntero>1){
        resto=numeroIntero%2
        numeroBinario.push(resto)
        numeroIntero=Math.floor(numeroIntero/2)
    }
    numeroBinario.push(numeroIntero)
    for(let i=31-numeroBinario.length;i>0;i--){
        numeroBinario.push(0)
    }
    numeroBinario.reverse()
    return numeroBinario
}

function complemento2(numeroBinario){
    let inverti=[1,0]
    riporto=1
    for (let i=0;i<numeroBinario.length;i++){
        numeroBinario[i]=inverti[numeroBinario[i]]
    }
    for(let i=numeroBinario.length-1;i>0;i--){
        if (numeroBinario[i]==1 && riporto==1){
            numeroBinario[i]=0
            riporto=1
        }else if (numeroBinario[i]==1 && riporto==0){
            numeroBinario[i]=1
            riporto=0
        }else if (numeroBinario[i]==0 && riporto==1){
            numeroBinario[i]=1
            riporto=0
        }else{
            numeroBinario[i]=0
            riporto=0
        }
    }
}
// Programma
let input=require("readline-sync");
let numeroIntero=0
let numeroBinario=[]
let numeroBinarioStr=""
let segno=0
numeroIntero=parseInt(input.question("Numero intero: "))
while (numeroIntero<-2147483648 || numeroIntero> 2147483647){
    print("Errore: inserire un numero compreso tra -2147483648 e 2147483647")
    numeroIntero=parseInt(input.question("Numero intero: "))
}
if (numeroIntero<0){
    segno=1
    numeroBinario=convertiBinario(-(numeroIntero))
    complemento2(numeroBinario)
}
else if (numeroIntero>0){
    segno=0
    numeroBinario=convertiBinario(numeroIntero)
}
numeroBinarioStr="["+segno+"]["
for (let i=0;i<numeroBinario.length;i++){
    if (i<31){
        numeroBinarioStr+=numeroBinario[i]
    }
}
numeroBinarioStr+="]"
console.log(numeroBinarioStr)

 

Soluzione Python


# Funzioni

# Converte numero intero in binario
def convertiBinario(numeroIntero):
    numeroBinario=[]
    while numeroIntero>1:
        resto=numeroIntero%2
        numeroBinario.append(resto)
        numeroIntero=int(numeroIntero/2)
    numeroBinario.append(numeroIntero)
    for i in range(31-len(numeroBinario)):
        numeroBinario.append(0)
    numeroBinario.reverse()
    return numeroBinario

# Calcola il complemento a due di un numero binario
def complemento2(numeroBinario):
    inverti=[1,0]
    riporto=1
    for i in range(len(numeroBinario)):
        numeroBinario[i]=inverti[numeroBinario[i]]
    for i in range(len(numeroBinario)-1,0,-1):
        if numeroBinario[i]==1 and riporto==1:
            numeroBinario[i]=0
            riporto=1
        elif numeroBinario[i]==1 and riporto==0:
            numeroBinario[i]=1
            riporto=0
        elif numeroBinario[i]==0 and riporto==1:
            numeroBinario[i]=1
            riporto=0
        else:
            numeroBinario[i]=0
            riporto=0

# Programma
numeroIntero=0
numeroBinario=[]
segno=0
numeroIntero=int(input("Numero intero: "))
while numeroIntero<-2147483648 or numeroIntero> 2147483647:
    print("Errore: inserire un numero compreso tra -2147483648 e 2147483647")
    numeroIntero=int(input("Numero intero: "))
if numeroIntero<0:
    segno=1
    numeroBinario=convertiBinario(-(numeroIntero))
    complemento2(numeroBinario)
elif numeroIntero>0:
    segno=0
    numeroBinario=convertiBinario(numeroIntero)
print("["+str(segno)+"][",end="")
for i,x in enumerate(numeroBinario):
    if i<31: print(x,end="")
print("]")


Leggi anche le altre lezioni:

COMPETENZE PER PROGRAMMARE: MONDO REALE E MONDO DIGITALE
COMPETENZE PER PROGRAMMARE: I SISTEMI DI NUMERAZIONE


Segui sul canale YouTube "Skill Factory Channel" la PlayLIst: COMPETENZE PER PROGRAMMARE
Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

 
Share Button

CV Story (Gino Visciano): "La rivoluzione WWW (World Wide Web) e i linguaggi visuali" - Terza parte, gli anni '2000 (inizio del primo decennio)

Gino Visciano | Skill Factory - 08/03/2024 18:53:50 | in Work experience

Gli avvenimenti degli anni 90', hanno contribuito molto alla rivoluzione World Wide Web che si è verificata all'inizio degli anni 2000', tra questi quelli più importanti sono stati sicuramente:

1982 - la definizione del protocollo di rete TCP/IP, fondamentale per il funzionamento di Internet.
1984 - la nascita del sistema DNS (Domain Name System), che permette di assegnare i nomi di dominio alle reti in Internet
1990 - la nascita del protocollo applicativo HTTP (Hypertext Transfer Protocol) e del linguaggio HTML (Hypertext Markup Language)

Nel 1991 il CERN (Centro Europeo di Ricerca Nucleare) annuncia la nascita del World Wide Web e inizia l'era del WEB 1.0. Ricordo che le pagine web erano statiche, ma l'utilizzo dell'HTML e dei browser rappresentava una novità significativa, perché allora eravamo abituati a lavorare principalmente con interfacce di tipo testo.

Naturalmente un ruolo importante nella diffusione del WWW lo hanno avuto i web server, a quel tempo il più diffuso era il daemon HTTP, sviluppato da Rob McCool al NCSA (National Center for Supercomputing Application), ma nel 1995 nacque APACHE, uno dei più importanti progetti proposta dall'Apache Software Foundation, una delle più grandi comunità distribuite di sviluppatori che lavorano su progetti open source.


 

Il primo browser che ho utilizzato è stato MOSAIC, creato dall'NCSA (National Center for Supercomputer Applications) dell’Università dell’Illinois, ma velocemente nascevano nuovi browser con caratteristiche sempre più evolute, come ad esempio: Netscape, Mozilla Firefox, Internet Explorer, Opera e Safari.

E' difficile descrivere le emozioni che provavo quando ho iniziato a navigare con i primi browser sul Web attraverso Internet , perché allora non avevamo ancora né le conoscenze, né le abilità per capire quello che di lì a poco avrebbe cambiato radicalmente il nostro modo di lavorare e le nostre abitudini, ma dopo la meraviglia è prevalsa voglia di scoprire e comprendere tutto quello che rappresentasse il WWW.    

Le mie prime pagine web dinamiche le ho create con il linguaggio C, utilizzando la tecnica CGI (Common Gateway Interface - interfaccia comune). Il browser inviava le richieste di pagine HTML al server web, il server leggeva la richiesta, ad esempio pagina.cgi ed eseguiva il programma c corrispondente.

Allora c'era il problema che gli interpreti HTML dei browser non erano standardizzati come accade oggi e spesso utilizzando browser diversi si ottenevano risultati differenti e inaspettati, difficili da prevedere e gestire.  

Il programma c, durante l'esecuzione, attraverso la funzione printf, come se fosse una normale operazione di output,  creava la pagina HTML da inviare al browser, come mostra il codice seguente.

#include <stdio.h>
int main(void)  {

/*informazione necessaria per la risposta*/
    printf("Content-type: text/html\n\n"); 
 
 /*Inviamo su STDOUT i tag HTML*/
  printf("<html>\n"
         "<head>\n"
         "<title>Hello World!</title>\n"
         "</head>\n"
         "<body>\n"
         "<h1><p align=\"center\">Hello World</p></h1>\n"
         "</body>\n"
         "</html>\n");
  return 0;

}

Il client inviava le richieste get/post al server esattamente come facciamo ancora oggi:

<form method="GET" action="/cgi-bin/benvenuto.cgi">
   Nome:<input type="text" name="nome"><br />
   Cognome:<input type="text" name="cognome"><br />
  <input type="submit" value="Clicca">
</form>

La tecnica CGI per creare pagine web dinamiche con il tempo è stata sostituita da quella di tipo SERVER SIDE, più semplice della precedente perché il codice HTML poteva essere utilizzato direttamente con il linguaggio di programmazione usato per creare la pagina web (HTML-embedded).

I linguaggi di tipo SERVER SIDE più conosciuti sono i seguenti:

1) PHP, originariamente conosciuto come Personal Home Page, oggi noto come Hypertext Preprocessor, processore di ipertesti. PHP combina il codice l'HTML con un linguaggio di programmazione simile a C e Perl.

2) ASP (Active Server Page), la soluzione Microsoft che permetteva di creare pagine web dinamiche, utilizzando l'HTML con il linguaggio di programmazione  VBscript oppure quello JScript. Questa tecnologia oggi è stata completamente da quella ASP.NET, che permette di creare pagine web dinamiche attraverso la scrittura di pagine Razor, che combinano codice HTML con codice C#.

3) JSP (Java Server Page), la soluzione creata da Sun Microsystems per creare pagine web dinamiche, utilizzando l'HTML con il linguaggio di programmazione Java, la stessa che usiamo ancora oggi.
 


Oltre ai linguaggi SERVER SIDE, a favorire in tutto il mondo lo sviluppo dei siti web, dei portali e dei blog, è stata anche la diffusione dei Content Management System o CMS.

CMS con cui ho lavorato sono il WordPress, Joomla, Drupal e Dreamweaver, tra questi quello che ha avuto maggiore successo è stato senza dubbio WordPress

WordPress è nato nel 2003 dall’idea congiunta di Matt Mullenweg e Mike Little, ben presto si è affermato in rete come uno dei servizi di personal publishing più scelti al mondo. Svariate ricerche condotte riguardo alla popolarità delle piattaforme di personal publishing hanno mostrato che WordPress si colloca al primo posto, seguito da Joomla e Drupal. 

A determinare ancora di più Il successo di Internet e del World Wide Web è stato il passaggio dal WEB 1.0 al WEB 2.0. Il termine WEB 2.0 fu coniato per la prima volta tra il 2004 e il 2005, dall'editore americano, “O’Reilly Media” - inizia l'era dei social network e il World Wide Web diventa accessibile a tutti.

 

I primi anni del 2000 sono anche stati caratterizzati dalla nascita dei primi linguaggi di programmazione di tipo visuale,  io conoscevo bene il Visual Basic della Microsoft, con cui ho iniziato a creare le mie prime applicazioni con interfacce grafiche (GUI - Graphical User Interface).

Le GUI di tipo desktop inizialmente le creavo con i Windows Form, poi, con il passaggio al framework .NET,  ho iniziato ad usare WPF o Windows Presentation Foundation, che creava le GUI, con il linguaggio xaml (extensible application markup language).

Ben presto però, con la diffusione delle applicazioni Web, anche l'uso della tecnologia WPF, venne sostituita dai Web Form, che permettevano di creare GUI di tipo HTML.

Tutto quello che riuscivo a fare con il Visual Basic, lo avevo imparato leggendo il libro "Visual Basic 5", della McGraw-Hill scritto da Gary Cornell e il libro "Sviluppare con componenti Visual Basic 6.0", della Mondadori, scritto da Guy Eddon e Henry Eddon. 

Conservo ancora questi libri nella mia libreria, tra gli altri libri d'informatica, che spesso consulto per ricordare i concetti che con il tempo si perdono oppure per confrontare il presente con il passato, per capire come cambiano ed evolvono gli strumenti e le tecniche che applichiamo nel nostro lavoro.

La frase che mi colpì subito del libro "Visual Basic 5" fu: "un immagine vale più di mille parole", perché in sintesi descriveva il cambiamento che stavamo vivendo.     

Così ho iniziato a creare applicazioni Windows con GUI che, oltre ai normali controlli, contenevano anche menu ed icone. Usavo DDE (Dynamic Data Exchange) e oggetti OLE (Object Linking and Embedding) per far comunicare le applicazioni che creavo altre applicazioni di Windows e utilizzavo controlli ActiveX per rendere più potenti le mie applicazioni Web.

Naturalmente per sviluppare applicazioni con Visual Basic e gestire la persistenza dei dati ero diventato anche un esperto di disegno, amministrazione e implementazione di SQL Server.

Ho lavorato e fatto il docente di Visual Basic fino al 2002, quando la Microsoft, per contrastare il crescente dominio di Java, creato dalla Sun Microsystems, introdusse il nuovo framework .NET (DOTNET), un ecosistema composto dai nuovi linguaggi: Visual Basic .NET e Visual C# .NET. Le caratteristiche principali di DOTNET erano le seguenti:

  • Linguaggi di programmazione ad oggetti
  • Trasportabilità delle applicazioni attraverso l'Intermediate Language (IL)
  • Ambiente di esecuzione (runtime): Common Language Runtime (CLR)
  • Libreria: Base Class Library (BCL)
  • Possibilità di ampliare le funzionalità con NuGet, il gestore di pacchetti di .NET (simile a quello che è npm per Node.js)
  • Il server Web IIS (Internet Information Server), progettato per fornire contenuto Web agli utenti. 

 

E' stato poi il mercato a decidere che il linguaggio C# diventasse il linguaggio di programmazione ad oggetti più utilizzato dalle aziende IT, per sviluppare applicazioni professionali su piattaforme Windows .NET.

Allora collaboravo ancora con Elea e DGS e la crescente domanda di specializzazione, mi spinse ad ottenere le seguenti certificazioni Microsoft:

  • Microsoft Certified Solution Developer (MCSD)
  • Microsoft Certified Technology Specialist (MCTS)
  • Microsoft Certified Professional Developer (MCPD)

 

Tutto quello che mi serviva per superare gli esami di certificazione, l'ho studiato dai libri e dai manuali seguenti:

 

Continua con gli anni '2000, la fine del primo decennio ...
Share Button

Sei uno studente oppure un lavoratore? Scopri qual è il tuo livello di EQF.

Gino Visciano | Skill Factory - 06/03/2024 23:15:13 | in Formazione e lavoro

La formazione può essere formale, non formale e informale.

L'apprendimento formale segue regole e piani predefiniti, come avviene a scuola o attraverso i percorsi di formazione professionale, questo tipo di formazione è riconosciuto e può essere verificato e certificato.

L'apprendimento non formale è quello che avviene attraverso le esperienze formative personali o aziendali, fatte per approfondire le conoscenze e le abilità in uno specifico ambito di competenze e che servono per favorire la propria crescita professionale. Questo tipo di formazione è molto importante, ma può essere certificata da attestati  oppure qualifiche non riconosciti dal sistema di formazione formale

L'apprendimento informale avviene attraverso le esperienze risultanti dalle attività della vita quotidiana legate al lavoro, alla famiglia, al tempo libero. Questo tipo di formazione, pur essendo fondamentale per la vita di ogni cittadino, non può essere certificato, ma deve essere dimostrato attraverso la capacità di sapere e saper fare

In Europa, prima del 2008, ogni nazione utilizzava un proprio sistema di formazione e qualifica. Con l'obiettivo di favorire la mobilità dei cittadini, le pari opportunità e un adeguato livello di formazione permanente, nel 2008 è stato creato l'EQF.

L'EQF (European Qualifications Framework) è il quadro europeo delle qualificazioni, nasce allo scopo di comparare il livello d'istruzione e il livello di qualifica professionale degli studenti e dei lavoratori di tutta l'Europa. 

Il Centro europeo per lo sviluppo della formazione professionale (Cedefop) e la Fondazione europea per la formazione (ETF), in quanto agenzie europee, svolgono un ruolo importante nel sostenere l'attuazione dell'EQF. 

In Italia l'EQF è conosciuto come quadro nazionale delle qualificazioni (QNQ), rappresenta il dispositivo nazionale che favorisce le attività per rendere comparabili i livelli di studio e le qualifiche professionali degli studenti e dei lavoratori italiani, con quelli delle altre nazioni europee.

In linea con il quadro  europeo  delle  qualifiche (EQF) ,  il  QNQ  si sviluppa su tre dimensioni:

1) conoscenze 
2) abilita'
3) autonomia e responsabilita'.

Attraverso queste tre dimensioni si può descrivere il tipo di competenza che bisogna avere per raggiungere uno degli 8 livelli di qualificazione EQF, dove il livello 1 è il più basso e l'8 è il più alto. 

Il QNQ è stato istituito nel 2013 dal MINISTERO DEL LAVORO E DELLE POLITICHE SOCIALI di concerto con il MINISTERO DELL'ISTRUZIONE, DELL'UNIVERSITA' E DELLA RICERCA.

Il Quadro nazionale delle qualificazioni è lo strumento  che  descrive e classifica le  qualifiche  rilasciate  nell'ambito   del Sistema nazionale  di  certificazione  delle  competenze.

Per leggere gli articoli del decreto pubblicati sulla "Gazzetta Ufficiale", clicca qui

Per avere una mappa dettagliata del lavoro e delle qualificazioni, del nostro Sistema nazionale di certificazione delle competenze,  puoi consultare l'ATLANTE DEL LAVORO E DELLE QUALIFICAZIONI.

L'Atlante nasce dal lavoro di ricerca condotto dall'INAPP (Istituto Nazionale Per l'Analisi delle Politiche Pubbliche), con la partecipazione di diversi soggetti istituzionali, delle parti datoriali e sindacali, delle rappresentanze bilaterali, delle associazioni professionali, degli esperti settoriali e degli stakeholder del sistema lavoro-learning.

Per accedere all'ATLANTE DEL LAVORO E DELLE QUALIFICAZIONI, clicca qui.

La tabella seguente mostra la corrispondenze tra i livelli EQF e i titoli di studio che si possono coseguire in Italia:

Livello EQF  | Tipologia di qualificazione

1                        Diploma di licenza conclusiva del I ciclo di istruzione

2                        Certificazione delle competenze di base acquisite in esito all'assolvimento dell'obbligo di istruzione

3                        Attestato di qualifica di operatore professionale

4                        Diploma professionale di tecnico, Diploma liceale, Diploma di istruzione tecnica, Diploma di istruzione professionale, Certificato di specializzazione tecnica superiore

5                        Diploma di tecnico superiore

6                        Laurea, Diploma Accademico di I livello

7                        Laurea Magistrale, Diploma Accademico di II livello, Master universitario di I livello, Diploma Accademico di specializzazione (I), Diploma di perfezionamento o master (I)

8                        Dottorato di ricerca, Diploma accademico di formazione alla ricerca, Diploma di specializzazione, Master universitario di II livello, Diploma Accademico di specializzazione (II), Diploma di perfezionamento o master (II)

 

Utilizzando la tabella seguente, puoi individuare il livello EQF che corrisponde al tuo profilo professionale in base al livello di conoscenza, abilità, autonomia e responsabilità raggiunto:

 

 


skill factory, academy delle professioni digitali, www.skillfactory.it, gino visciano

Per informazioni e contatti: www.skillfactory.it

Share Button

Il 2024 è un anno bisestile. In programmazione come facciamo a capire se un anno è secolare e bisestile?

Gino Visciano | Skill Factory - 02/03/2024 12:20:59 | in Home

Il 2024 è un anno bisestile, perché febbraio è di 29 giorni. Questo significa che il 2024 durerà 366 giorni e non 365 giorni come accade per gli anni non bisestili.

Nel calendario Gregoriano è bisestile un anno ogni 4, questa correzione è necessaria perché astronomicamente un anno solare dura circa 365,25 giorni.

Se non tenessimo conto di questa variazione, ogni 4 anni si accumulerebbe un ritardo di un giorno. I continui ritardi accumulati nel tempo, modificherebbero le date delle stagioni che corrispondono agli equinozi di primavera e autunno e i solstizi d'estate e inverno, spostandole in avanti nel tempo.
 

Skill Factory - Skillfactory - Gino Visciano - Skillbook - Python - anno bisestile

Gli anni secolari, ovvero quelli divisibili per 100, sono bisestili se oltre ad essere divisibili per 100 sono divisibili anche per 400. Quindi un anno è sicuramente bisestile se è divisibile per 400.

Ad esempio il 1600 è bisestile perché è divisibile per 400, mentre il 1700 non è bisestile perché non è divisibile per 400.

Gli anni non secolari sono bisestili solo se sono divisibili per 4.
 
Quindi, un programmatore, per verificare se un anno è bisestile, deve prima controllare se è secolare, in caso affermativo deve anche vedere se è divisibile per 400. Se l'anno non è secolare, per essere bisestile deve essere divisibile per 4.

Il programma Python seguente, ci permette di verificare se un anno è secolare e bisestile:


# Verifica se l'anno è bisestile

# Funzione
def tipo_anno():
    try:
        messaggio="L'anno "+str(v_anno.get())+" "
        if v_anno.get()%100==0:
            messaggio=messaggio+"è secolare e "
            if v_anno.get()%400==0:
                messaggio=messaggio+"bisestile."
            else:
                messaggio=messaggio+"non è bisestile."
        else:
            messaggio=messaggio+"non è secolare e "
            if v_anno.get()%4==0:
                messaggio=messaggio+"bisestile."
            else:
                messaggio=messaggio+"non è bisestile."
        tk.messagebox.showinfo(title='Informazioni', message=messaggio)
    except:
        messaggio="Inserisci l'anno da verificare"
        tk.messagebox.showinfo(title='Errore', message=messaggio)

def reset():
    v_anno.set("")

# Programma
import tkinter as tk

from tkinter.messagebox import showinfo
root=tk.Tk()
root.geometry('350x100+150+150')
root.resizable(False, False)
root.title('Verifica anno secolare e bisestile')
v_anno=tk.IntVar(root,"")
lbl_anno=tk.Label(root,text="Inserisci l'anno per verificare se è secolare e bisestile").pack(pady=5)
txt_anno=tk.Entry(root, justify="right",textvariable=v_anno).pack(pady=5)
frm_button=tk.Frame(root)
btn_verifica=tk.Button(frm_button,text="VERIFICA",command=tipo_anno).pack(side=tk.LEFT)
btn_reset=tk.Button(frm_button,text="RESET",command=reset).pack(side=tk.RIGHT)
frm_button.pack()
root.mainloop()


Se sei interessato ad approfondire questo argomento, clicca qui, per imparare a creare un calendario perpetuo con Python.

 

 

 

 

Share Button

Al via i corsi di specializzazione dell'Academy delle professioni digitali - "Skill Factory".

Gino Visciano | Skill Factory - 23/02/2024 15:16:10 | in Formazione e lavoro

Da marzo sono aperte le iscrizioni per partecipare ai corsi di specializzazione dell'Academy delle professioni digitali. Un progetto innovativo - firmato Skill Factory - per creare gli specialisti del digitale che servono alle aziende che vogliono essere competitive.

L'Academy, diretta da Gino Visciano, con il suo team di esperti in formazione digitale, ti permette di acquisire le competenze trasversali, tecniche e manageriali, per creare uno dei 6 profili professionali più richiesti dal mercato del lavoro digitale:

 

 

 

Clicca sull'immagine per accedere al dettaglio dei corsi.

È garantita:

  • Alta professionalità tecnica e didattica
  • Lezioni online con docente
  • Laboratori asincroni reali, con supporto remoto in smart working
  • Flessibilità per permettere anche a chi studia o lavora di seguire i corsi
  • Pagamento mensile
  • Assistenza alla compilazione del cv
  • Presentazione del cv ai Job Partner della Skill Factory
  • Orientamento e preparazione al colloquio di lavoro
  • Digital badge che attesta la partecipazione al corso e certifica le competenze acquisite.


Per finalizzare l’iscrizione al corso sarà necessario versare la prima rata mensile con possibilità di recesso entro il primo mese.

 


Per informazioni e contatti:
sito: www.skillfactory.it
cell.: 3270870141
tel.: 08118181361

Share Button
TOP