Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Fondamenti di informatica, Slide di Fondamenti di informatica

Fondamenti di informatica di Stefano mozzanti

Tipologia: Slide

2025/2026

Caricato il 14/04/2026

gaia_ferrarese
gaia_ferrarese 🇮🇹

12 documenti

1 / 59

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
27/02 FONDAMENTI DI INFORMATICA Stefano Mazzanti
INTRODUZIONE:LEZIONE 1
INFORMATICA >Scienza che studia l’elaborazione delle informazioni ’,L’informatica è la scienza
degli algoritmi che descrivono e trasformano l informazione: la loro teoria, analisi, progetto,
ecienza, realizzazione ed applicazione (ACM - Association for Computing Machinery)3.
Information and Communication Technology (ICT)"
INFORMAZIONE >Ragguaglio, notizia atta a essere formalizzata in dati e destinata a essere
trattata da un sistema di trattamento automatico delle informazioni (Zingarelli)"
NOTIZIA >Cognizione, conoscenza, nozione, idea"
Elaborazione delle informazioni
Perché elaborare (trasformare, manipolare) informazioni? Per risolvere velocemente dei
problemi di calcolo."
Esempio. Supponiamo di voler trasportare un pianoforte in una stanza senza finestre."
1. Soluzione A. Provare a girare e rigirare il pianoforte in tutti i modi possibili, per vedere se passa
attraverso la porta (faticosa)."
2. Soluzione B. Misurare le dimensioni (minime) del pianoforte e quelle (massime) della porta, poi"
confrontarle:"
1. se la dimensione del pianoforte è minore di quella della porta, con un'appropriata rotazione il"
pianoforte è trasportabile nella stanza."
2. In caso contrario il trasporto non è possibile."
La soluzione B acquisisce informazioni (le dimensioni del pianoforte e della porta) e le elabora
(confronta) per fornire una soluzione (il trasporto è possibile e in quale modo?)."
Ogni essere umano elabora grandi quantità di informazioni, ma può trovarsi in dicoltà se:"
1) l'elaborazione da compiere è molto complessa, 2) l'elaborazione deve avvenire rapidamente."
ALGORITMO >La matematica nasce per risolvere necessità di ordine pratico (Papiro di Ahmes,
Tavoletta Plimpton 322 , risalenti al 1700 a.C.) :"
-Contare (per le transazioni commerciali),"
-Misurare lunghezze, aree, volumi di terreni o edifici."
Un algoritmo (da Mohammed ibn-Musa al-Khuwarizmi, VIII secolo d.C.) è un procedimento
composto da un numero finito di istruzioni da eseguire per passi successivi, che porta in un
tempo finito a una soluzione del problema da risolvere."
Esempi:
1. algoritmi per il calcolo delle 4 operazioni aritmetiche"
2. algoritmo per risolvere equazioni di secondo grado"
Programma
Un algoritmo deve essere descritto in un linguaggio che un esecutore sia in grado di interpretare."
Un programma per una macchina è una lista di istruzioni che tale macchina è in grado di
interpretare ed eseguire."
I linguaggi usati per scrivere programmi sono detti linguaggi di programmazione."
D'ora in poi useremo liberamente i termini algoritmo e programma", considerandoli come
sinonimi. "
-Calcolatore (Computer, Ordinateur, …)> Macchina che esegue programmi. Memorizza ed
elabora dati.
Un'elaborazione dati avviene eseguendo un programma a cui sono forniti i dati."
elaborare >Comporre gli elementi raccolti in relazione a un problema, ordinare e sviluppare dati di
varia natura mediante procedimenti di calcolo più o meno complessi: e. i risultati di un inchiesta ’ ;
e. statisticamente le risposte di un referendum; in partic., con riferimento all’impiego di sistemi
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b

Anteprima parziale del testo

Scarica Fondamenti di informatica e più Slide in PDF di Fondamenti di informatica solo su Docsity!

27/02 FONDAMENTI DI INFORMATICA Stefano Mazzanti

INTRODUZIONE:LEZIONE 1

INFORMATICA > Scienza che studia l’elaborazione delle informazioni ’,L’informatica è la scienza degli algoritmi che descrivono e trasformano l informazione: la loro teoria, analisi, progetto, efficienza, realizzazione ed applicazione (ACM - Association for Computing Machinery)3. Information and Communication Technology (ICT) INFORMAZIONE > Ragguaglio, notizia atta a essere formalizzata in dati e destinata a essere trattata da un sistema di trattamento automatico delle informazioni (Zingarelli) NOTIZIA > Cognizione, conoscenza, nozione, idea Elaborazione delle informazioni Perché elaborare (trasformare, manipolare) informazioni? Per risolvere velocemente dei problemi di calcolo. Esempio. Supponiamo di voler trasportare un pianoforte in una stanza senza finestre.

1. Soluzione A. Provare a girare e rigirare il pianoforte in tutti i modi possibili, per vedere se passa attraverso la porta (faticosa). 2. Soluzione B. Misurare le dimensioni (minime) del pianoforte e quelle (massime) della porta, poi confrontarle:

  1. se la dimensione del pianoforte è minore di quella della porta, con un'appropriata rotazione il pianoforte è trasportabile nella stanza.
  2. In caso contrario il trasporto non è possibile. La soluzione B acquisisce informazioni (le dimensioni del pianoforte e della porta) e le elabora (confronta) per fornire una soluzione (il trasporto è possibile e in quale modo?). Ogni essere umano elabora grandi quantità di informazioni, ma può trovarsi in difficoltà se:
  1. l'elaborazione da compiere è molto complessa, 2) l'elaborazione deve avvenire rapidamente. ALGORITMO > La matematica nasce per risolvere necessità di ordine pratico (Papiro di Ahmes, Tavoletta Plimpton 322 , risalenti al 1700 a.C.) : -Contare (per le transazioni commerciali), -Misurare lunghezze, aree, volumi di terreni o edifici. Un algoritmo (da Mohammed ibn-Musa al-Khuwarizmi, VIII secolo d.C.) è un procedimento composto da un numero finito di istruzioni da eseguire per passi successivi, che porta in un tempo finito a una soluzione del problema da risolvere. Esempi:
  1. algoritmi per il calcolo delle 4 operazioni aritmetiche
  2. algoritmo per risolvere equazioni di secondo grado Programma Un algoritmo deve essere descritto in un linguaggio che un esecutore sia in grado di interpretare. Un programma per una macchina è una lista di istruzioni che tale macchina è in grado di interpretare ed eseguire. I linguaggi usati per scrivere programmi sono detti linguaggi di programmazione. D'ora in poi useremo liberamente i termini algoritmo e programma", considerandoli come sinonimi. -Calcolatore (Computer, Ordinateur, …)> Macchina che esegue programmi. Memorizza ed elabora dati. Un'elaborazione dati avviene eseguendo un programma a cui sono forniti i dati. elaborare >Comporre gli elementi raccolti in relazione a un problema, ordinare e sviluppare dati di varia natura mediante procedimenti di calcolo più o meno complessi: e. i risultati di un inchiesta ’ ; e. statisticamente le risposte di un referendum; in partic., con riferimento all’impiego di sistemi

elettronici, eseguire al computer operazioni, ’ procedure e calcoli sui dati inseriti nell’elaboratore, utilizzando specifici programmi: ’ e. su calcolatore dati numerici, alfanumerici, ecc.; anche riferito all elaboratore stesso: ’ il computer sta elaborando i dati. .... Eseguire > Compiere, mettere in atto quanto è prescritto da altri, e spec. da un autorità o da una deliberazione ’ di questa: e. un ordine, un comando; e. la legge, una sentenza. b. Realizzare, mettere in pratica quanto è stato ideato o pensato: e. un disegno, un progetto, una proposta. c. Fare un lavoro: e. un quadro su commissione; e. una riparazione; lavori mal eseguiti, eseguiti con molta precisione. ...

John von Neumann accanto allo IAS computer

Architettura di von Neumann È un modello teorico di organizzazione e funzionamento di un calcolatore, proposto negli anni '40 da John von Neumann. Secondo von Neumann, un calcolatore è diviso in tre parti o sottosistemi:

  • **memorizzazione -elaborazione
  • interfaccia (** tra loro interconnessi.) Sia i dati che le istruzioni del programma da eseguire risiedono in memoria, da cui l'unità di elaborazione preleva in sequenza le istruzioni da eseguire e i dati necessari per ciascuna istruzione. Caricando in memoria un nuovo programma lo si può eseguire, risolvendo un nuovo problema di calcolo.Se non si dispone di una macchina programmabile bisogna costruire una macchina specifica per ogni problema. Un calcolatore è una macchina a programma memorizzato , ovvero è in grado di svolgere un compito se è dotata di un programma apposito, mentre una console da videogame è una macchina a programma cablato (si può solo giocare, magari più giochi, ma non si può fare altro).

Il primo calcolatore italiano: la Calcolatrice Elettronica Pisana - CEP

Costruita su suggerimento di Enrico Fermi negli anni Cinquanta del ventesimo secolo. Mini/Microcomputer I primi calcolatori sono realizzati con valvole termoioniche (1940-1955), poi con il miglioramento della tecnologia elettronica, con transistor (1950-1965) e successivamente con circuiti integrati: il loro costo e le loro dimensioni si riducono drasticamente, mentre le prestazioni aumentano (secondo la legge di Moore: il numero di componenti elettronici presenti in un chip raddoppia ogni 18 mesi). I primi calcolatori si trovano solo in alcuni laboratori di ricerca, poi si diffondono in grandi centri di calcolo e, con l'introduzione dei mini/microcalcolatori (ad es. la serie PDP-VAX della DIGITAL), ogni ente/organizzazione ha un proprio calcolatore. Supercalcolatori Nel 1982 venne sviluppato dalla compagnia CRAY il primo supercomputer multi-processore: il CRAY X-MP. I super-calcolatori sono utilizzati per applicazioni in cui è necessaria una grande potenza di calcolo (calcolo scientifico, grafica tridimensionale). Personal Computer La nascita dei microprocessori negli anni Settanta del secolo scorso porta all'introduzione sul mercato dei personal computer ( PC). Anche il modo di usare i calcolatori cambia: con i grandi calcolatori (mainframe), il tipo di elaborazione era di tipo "batch" (a lotti): l'utente (o chi per lui) lancia l'esecuzione del programma fornendogli i dati necessari ed attende il risultato dell’esecuzione.

L'intelligenza artificiale (IA) = è la disciplina che studia la capacità dei computer di riprodurre alcune delle funzioni del cervello umano, come la percezione, il ragionamento, l'apprendimento, la risoluzione dei problemi e la creatività. La IA ha avuto alterne fortune passando da momenti di grandi aspettative a periodi di crisi detti "inverni AI" a causa del mancato raggiungimento di obiettivi palesemente velleitari. L'ultimo inverno si è protratto dalla fine degli anni '80 e i primi anni '90 del XX secolo. Oggi l'interesse per l'intelligenza artificiale è di nuovo alto grazie al successo di un nuovo filone di ricerca, il machine learning (apprendimento automatico) e in particolare il deep learning, che impiega le reti neurali, un modello di calcolo composto di "neuroni" artificiali, ispirato alle reti neurali biologiche. Il computer risolve un problema imparando dai dati che gli sono stati forniti (training set), eventualmente insieme ai risultati per tali dati. I dati forniti sono solo una parte dei possibili input, ma da questi viene costruito un programma, detto modello , che tenta di risolvere correttamente il problema per tutti gli input Esempi di Applicazioni: visione artificiale (Computer Vision), elaborazione del linguaggio (NLP, natural language processing), robot intelligenti. Infine, l'esempio più noto di deep learning è la recente ondata di applicazioni di IA generativa, diventata di dominio pubblico solo nel 2022: assistenti chatbot come ChatGPT, Gemini e Claude, nonché servizi di generazione di immagini come Midjourney. Queste applicazioni hanno la capacità di produrre contenuti informativi o persino creativi in risposta a semplici richieste. L'intelligenza artificiale generativa è alimentata da "modelli di base" molto ampi che imparano a ricostruire il contenuto testuale e visivo in essi immesso: ricostruire un'immagine nitida da una versione rumorosa, prevedere la parola successiva in una frase e così via. Questi modelli di base operano come una sorta di database fuzzy della conoscenza umana, rendendoli adatti a un'ampia gamma di applicazioni senza bisogno di programmazione specifica o riaddestramento. L'ambiente di programmazione PROCESSING= è un ambiente di programmazione sviluppato al Media Lab del MIT. Processing permette ad artisti, designer ed in generale a persone con scarse cognizioni di informatica ma attratte dall’applicazione dell'informatica all'arte e al design, di fare delle sperimentazioni nel settore della "computer art” e dell' "interaction design" con uno strumento facile da usare ma sufficientemente potente. Processing è un prodotto open source disponibile per le piattaforme Windows, Macintosh e Linux; lo si può scaricare dal sito ufficiale. Processing è semplice da usare: si scrive il testo di un programma e lo si esegue (con il comando "run" o premendo il pulsante "Play" all'estrema sinistra della finestra dell'applicazione). I programmi (detti sketch) possono essere salvati e successivamente modificati. Il tutto avviene in modo semplice e intuitivo; un utente inesperto può imparare in pochi minuti. Il linguaggio di programmazione di Processing è derivato dal linguaggio di programmazione Java.

La sintassi di Processing è più semplice di quella di Java: è MOLTO più semplice scrivere un programma Processing che un programma Java. Il linguaggio Processing è diviso in tre livelli di complessità: elementare, intermedio, avanzato. Il livello avanzato coincide con lo stesso linguaggio Java.(La maggior parte degli esempi di programmazione ricadono nel livello intermedio.)

Primi esempi di programmazione

Un programma è composto da istruzioni elementari combinate in tre modi possibili, mediante opportune strutture di controllo. Le strutture di controllo di un linguaggio di programmazione sono dei costrutti (frasi) del linguaggio che controllano l’ordine di esecuzione delle istruzioni di un programma: Sequenza: le istruzioni sono eseguite in sequenza una dopo l’altra. Selezione: scelta dell’istruzione da eseguire tra più alternative. Iterazione: ripetizione (un certo numero di volte) di un gruppo di istruzioni. Una sequenza di istruzioni è una lista di istruzioni separate da “;” (punto e virgola). Una o più istruzioni possono essere raggruppate tra parentesi graffe {I1; ...; In;} per formare un blocco di istruzioni. Le istruzioni sono eseguite nell’ordine in cui appaiono: I1, ... , In

Esempio

Il seguente sketch Processing disegna cinque rette oblique e parallele. size(200, 200); background(0); // Set the black background stroke(255); // Set line value to white strokeWeight(5); // Set line width to 5 pixels line(10, 80, 30, 40); // Left line line(20, 80, 40, 40); line(30, 80, 50, 40); // Middle line line(40, 80, 60, 40); line(50, 80, 70, 40); // Right line L'istruzione size( 200, 200) crea una finestra di 200 per 200 pixel entro cui avviene il disegno, l'istruzione background (0) sceglie il nero come colore dello sfondo l'istruzione stroke (255) sceglie il bianco come colore per il disegno delle linee, l'istruzione strokeWeight( 5) imposta lo spessore delle linee a 5 pixel. Ciascuna delle 5 linee di codice che seguono disegna una linea, ad es. l'istruzione line(10, 80, 30, 40) disegna una linea con estremi nei punti di coordinate (10, 80) e (30, 40). -Quali sono i punti di coordinate (10, 80) e (30, 40)? Il sistema di coordinate di Processing pone l'origine degli assi nell'angolo superiore sinistro della finestra di disegno, per cui spostandosi verso destra aumenta il valore della prima coordinata (x) di un punto, mentre spostandosi verso il basso aumenta il valore della seconda coordinata (y). L'immagine prodotta dallo sketch appare in bianco e nero, poiché è stato scelto di disegnare con immagini a livelli di grigio, scelti tra 256 tonalità diverse: 0 per il nero e 255 per il bianco. Ogni istruzione del programma è seguita da un commento, un testo inserito per documentare il programma, che non viene considerato come codice, ma viene scartato durante l'esecuzione del programma. I commenti usati in questo primo esempio sono mono riga, ovvero iniziano dopo i simboli "//" e terminano in fondo alla riga.

Il risultato dell'esecuzione del programma è il seguente: Per disegnare l'immagine senza scrivere codice, usate Shape-Sketch, un tool di Processing per il disegno di semplice grafica 2D che genera anche il relativo codice Processing. Il comando bezier() disegna una curva di Bezier, una curva molto usata in computer graphics. Nella pagina degli appunti del corso trovate un editor di curve di Bezier (BezierEditor.zip) implementato come sketch Processing.

Zoog

Un altro esempio è quello dello Zoog di Daniel Shiffman. Il codice seguente genera un “omino”. size(200,200); // Set the size of the window background(255); // Draw a black background //Set ellipses and rects to CENTER mode ellipseMode(CENTER); rectMode(CENTER); //Draw Zoog's body stroke(0); fill(150); rect(100,100,20,100); //Draw Zoog's head fill(255); ellipse(100,70,60,60); //Draw Zoog's eyes fill(0); ellipse(81,70,16,32); ellipse(119,70,16,32); //Draw Zoog's legs stroke(0); line(90,150,80,160); line(110,150,120,160);

Digital Mondrian

Il seguente esempio è tratto dall' Interactive Mondrian di T. Pasquini Scriviamo uno sketch per generare della grafica sulla falsariga delle opere di Piet Mondrian. Vediamo come da un progetto su carta si passi al codice Processing. Consideriamo la "Composizione con rosso, blu e giallo". Scegliamo una scala per il disegno e iniziamo a scrivere il codice per le diverse regioni. L'immagine è composta da tre rettangoli colorati e diverse linee nere su sfondo bianco. La pianificazione in questa fase del progetto renderà la codifica molto più veloce. Ecco il codice risultante: size(400, 400); rectMode(CORNERS); background(255); noStroke(); //upper right,red rectangle fill(230, 20, 20); rect(100, 0, 400, 300); // lower left,blue rectangle fill(40, 20, 200); rect(0, 300, 100, 400); //lower right,yellow rectangle fill(230, 230, 20); rect( 3 80, 350, 400, 400); //black lines stroke(0); strokeCap(SQUARE); strokeWeight(12);

line(100, 0, 100, 400); line(0, 300, 400, 300); line(380, 300, 380, 400); strokeWeight(20); line(0, 200, 100, 200); line(380, 350, 400, 350); CODIFICA DELL’INFORMAZIONE LEZIONE 2 Prima di discutere più approfonditamente di programmi e calcolatori, è necessario sapere come i dati sono rappresentati all'interno di un calcolatore. I calcolatori memorizzano informazioni così come fanno gli esseri umani quando scrivono: i dati sono codificati, cioè rappresentati, da sequenze finite di simboli dette parole o stringhe. -Utilizziamo le parole su un alfabeto per rappresentare dei dati, così come in un qualsiasi linguaggio naturale (italiano, inglese, ...) le parole rappresentano dei concetti. Parole su un alfabeto finito Sia A = { a1, ... , ak } un alfabeto, cioè un insieme finito di simboli. I simboli sono le lettere dell’alfabeto Una parola composta da n lettere (anche ripetute) si dice che ha lunghezza n o è di lunghezza n. Ad esempio, "ab" ha lunghezza 2 mentre "abc" e "aba" hanno lunghezza 3. Domanda 1. Quante sono le parole di lunghezza n (anche con ripetizioni di lettere)? Le parole di n lettere scelte da un alfabeto di k simboli sono kn n = 1: le parole sono k : a^1 , ... , ak n = 2: le parole sono k^2 n=3 : le parole sono k3. Esempio: Se l'alfabeto è binario, ovvero di due sole lettere, ad esempio 0 e 1, le parole di lunghezza n+1 si ottengono aggiungendo 0 e 1 in coda alle parole di lunghezza n. In questo caso k=2.

- Lunghezza n=1 : Le parole possibili sono solo "0" e "1". Totale: 21=2. - Lunghezza n=2 : Le parole sono "00", "01", "10", "11". Totale: 22=4. - Lunghezza n=3 : Come vedi nel diagramma ad albero, ogni parola di lunghezza 2 si sdoppia aggiungendo uno "0" o un "1". Ottieni 8 combinazioni. Totale: 23=8. Il numero di parole di lunghezza n+1 è il doppio del numero di parole di lunghezza n. Codifica dei dati in un calcolatore Codificare: rappresentare le informazioni per mezzo di cifre (digits) e, per estensione, simboli qualsiasi.

Unità di misura della lunghezza di sequenze binarie Figura9.11 Prefissi standard della convenzione del Sistema Internazionale (SI) sulle misurazioni scientifiche. Generalmente un prefisso si riferisce a una potenza di 1000, eccetto quando la quantità (per esempio, la memoria) è calcolata in binario; per le quantità binarie il prefisso si riferisce a una potenza di 1024, che è 2 alla decima. Ad esempio, se un'immagine occupa 137KB allora la sua codifica è una sequenza binaria lunga 137·1024 byte = 137·1024·8 bit =1122304 bit. Rappresentazione di dati semplici: come si rappresentano nella memoria di un calcolatore i tipi di dati più comuni: valori Booleani, numeri, testi e colori. Valori Booleani I valori Booleani (da George Boole che li ha introdotti nell’ottocento), o valori logici “Vero” e “Falso” sono normalmente denotati dalle cifre 1 e 0 o dalle lettere V, F oppure con T, F o le parole true, false. Tre operazioni fondamentali sono definite sui valori Booleani: 1-congiunzione: A B, si legge A AND B (denotata anche con A ˄ B oppure in Processing A && B) 2-disgiunzione: A + B, si legge A OR B (denotata anche con A ˅ B oppure in Processing A || B) 3-negazione: ~A, si legge NOT A (denotata anche con ¬A oppure Ā oppure in Processing !A ) Ciascuna operazione è definita da una tabella di verità (dove 0=F e 1=V):

  • A .B è vera se e solo se sia A che B sono vere, ⋅ -A + B è vera se almeno una fra A e B è vera,

- ~B è la negazione (complemento, opposto) di B ed è vera se e solo se B è falsa e viceversa.

(È un modo grafico per rappresentare queste operazioni )Serve per processing per dover eseguire una istruzione in base al risultato di un certo testo )è alla base del funzionamento di tutti i circuiti digitali.

Un’altra importante operazione è lo XOR (OR esclusivo) indicato con A x B = (~A B) + (A ~B) che ha valore 1, se e solo se esattamente uno dei due argomenti è uguale a 1. Operazioni bitwise Le operazioni Booleane agiscono non solo su singoli bit, ma anche su sequenze di bit, operando simultaneamente sui bit di uguale posizione. La congiunzione di due sequenze binarie s e t di uguale lunghezza è data dalla congiunzione del primo bit di s e del primo bit di t, dalla congiunzione del secondo bit di s e del secondo bit di t, e così via. Lo stesso vale per disgiunzione e negazione. Ad esempio: -Queste operazioni vengono anche chiamate bitwise and, bitwise or e bitwise not per distinguerle dalle operazioni.Nonostante la loro semplicità, i valori Booleani sono molto importanti Come gli esseri umani rappresentano i numeri: la notazione posizionale La notazione usuale dei numeri naturali (interi non negativi: 0, 1, 2, ...) usa dieci simboli, le cifre decimali: “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9” scritti uno accanto all'altro: la sequenza: 2047 rappresenta il numero “duemilaquarantasette”. L’aggettivo “posizionale” sta a indicare il fatto che una cifra più a sinistra di un’altra ha una peso maggiore: nella sequenza 2047=2 10^3 + 0 10^2 +4 10^1 +7 10 0 (si dovrebbe dire 2 ,0 ,4 ,7 non duemilaquarantesette le cifre vengono moltiplicate per la posizione elevata alla 10 ),siamo abituati a usare quelle cifre attribuendoli un certo significato identifichiamo quei segni con il loro significato quindi automaticamente li associamo a quel significato cioè duemilaquarantasette).Noi usiamo una base 10 ma si può usare la base che noi vogliamo scelgo la base prendendola piccola avrò bisogno di più cifre quindi sequenza più lunga) (la cifra 2 indica “due migliaia”, la cifra 4 indica “quattro decine”.)

  • Cifra più significativa: cifra più a sinistra
  • Cifra meno significativa: cifra più a destra. La notazione posizionale si può applicare ad un alfabeto di B simboli, dove B ≥ 2 è detto la base della rappresentazione. Ad esempio, i Maya usavano la base 20, i Babilonesi la base 60.( invece che ricordarsene 100 bisognerebbe ricordarsene 3600) La rappresentazione posizionale in qualsiasi base è univoca: ogni numero è rappresentato da una sola sequenza di cifre. Ogni numero è rappresentato da una e una sola sequenza di cifre.

Conversione tra le basi 2, 8, 16 (e viceversa) Conversione di un numero N dalla base 2 ad una base 2 n Non si eseguono divisioni, ma, a partire da destra, si raggruppano i bit di N a gruppi di n e si converte ciascun gruppo in una cifra della base 2n Conversione dalla base 2 n^ alla base 2. Si converte ogni cifra in base 2n^ in una sequenza di n bit. Conversione dalla base 2 alla base 16=2^4 La conversione di una sequenza binaria in base esadecimale (e viceversa) avviene secondo la corrispondenza descritta dalla seguente tabella: Esempio A partire dal bit meno significativo ,si considerano le diverse quadruple di bit. Ogni quadrupla è sostituita dalla cifra esadecimale che, all'interno della tabella, si trova nella stessa colonna della quadrupla: Il verso delle frecce può essere invertito per trasformare una sequenza esadecimale in una binaria Conversione dalla base 2 alla base 8=2^3 La conversione di una sequenza binaria in base ottale (e viceversa) avviene secondo la corrispondenza descritta dalla seguente tabella: Esempio A partire dal bit meno significativo, si considerano le diverse triple di bit. Ogni tripla è sostituita dalla cifra ottale che, all'interno della tabella, si trova nella stessa colonna della tripla: Il verso delle frecce può essere invertito per trasformare una sequenza ottale in una binaria: Aritmetica in base 2, 8, 16

Gli algoritmi delle 4 operazioni aritmetiche sono identici per qualsiasi scelta della base. La moltiplicazione e la divisione di un numero binario per 2 si ottengono facendo scorrere (shift) a sinistra o a destra di una posizione il numero stesso. Nello scorrimento a sinistra entrano zeri a destra e la lunghezza aumenta di 1, nello scorrimento a destra si perde la cifra meno significativa e la rappresentazione si accorcia di 1. -In base 10 se aggiungi uno 0 alla fine aggiungo un molteplice di 210 se aggiungo uno 0 nella base binaria ottengo la rappresentazione del quoziente della divisone per 2 nella base modificata. Rappresentazione dei numeri naturali (unsigned numbers) I numeri naturali sono i numeri interi non negativi (anche detti interi senza segno, unsigned numbers):0,1,2,…sono naturali cioè trovati in natura ,senza segno. Si rappresentano in base 2 usando un numero n di bit fissato a priori (di solito n = 8, 16, 32, 64). (anche ora si usano 32 bit oggi ci permette di avere tanti numeri) Con n bit si rappresentano i numeri da 0 a 2n- Se un’operazione aritmetica genera un valore maggiore di 2n-1, si verifica un errore di supero (overflow),perché il numero ottenuto è troppo grande per essere rappresentato con n bit. Se n = 4 , la somma 1011+0111 =10010 genera un errore di overflow. Rappresentazione dei numeri interi Come per i numeri naturali, si usa la notazione binaria con n bit (n = 8, 16, 32, 64). Una metà delle sequenze di n bit rappresenta numeri negativi, mentre l’altra rappresenta numeri maggiori o uguali a zero. Il segno è determinato dal bit più significativo (bit di segno): 1 per valori negativi, 0 per valori positivi o zero. Esistono diverse rappresentazioni. Le più comuni sono:

**- rappresentazione con modulo e segno

  • complemento a 1, -complemento a 2** Come nel caso dei numeri naturali si rappresenta un insieme finito di valori, per cui è possibile il manifestarsi di errori d i overflow e underflow (il valore ottenuto è inferiore al valore minimo rappresentabile). Rappresentazione con modulo e segno Con n bit si rappresentano i numeri interi da -2(n-1^ -1) a 2n-1^ - Il bit più significativo indica il segno: 0 = positivo, 1 = negativo, gli altri bit rappresentano il modulo (valore assoluto). Ad es. con n=3 si rappresentano i numeri da -3 a 3 000 = 0, 001 = 1, 010 = 2, 011 = 3, 100 = 0, 101 = -1, 110 = -2, 111 = - Difetti: due rappresentazioni dello zero, il calcolo di operazioni aritmetiche deve tenere conto dei segni.

Rappresentazione di un testo Un testo è una sequenza di simboli che comprendono lettere dell’alfabeto maiuscole e minuscole, cifre decimali, segni di punteggiatura, caratteri speciali come indicatori di fine riga o pagina, tabulatori, etc.. Si codifica ogni simbolo con un numero. Esistono diversi insiemi di simboli (ASCII, UNICODE, EBCDIC e relative codifiche) che associano ad ogni simbolo un codice numerico (espresso ad esempio in base decimale, esadecimale, binaria). ASCII (American Standard Code for Information Interchange), usa 8 bit (con il bit più significativo a 0) per codificare un carattere preso da un alfabeto di 128 simboli. ASCII esteso (ad es. ISO/IEC 8859-1): 256 simboli che comprendono i 128 caratteri ASCII più altri simboli speciali (è, à, ü, ...) codificati con il bit più significativo a 1. UNICODE: più di 143000 caratteri degli alfabeti dei diversi linguaggi. Si codifica in vari modi, la codifica più comune è UTF-8 (altre codifiche sono UTF-16, UTF-32, UCS-2) che estende la codifica ASCII ed è a lunghezza variabile, da 1 a 4 byte per simbolo. Ad esempio, Il testo: ~mazzanti ha la seguente codifica ASCII (in decimale e in binario): In ogni colonna della tabella è indicato un simbolo del testo, la sua codifica ASCII in notazione decimale e in notazione binaria. La rappresentazione in memoria sarà pertanto 011111100110110101100001011110100111101001100001011011100111010001101001

che si ottiene concatenando i byte della terza riga della precedente tabella. Potete calcolare la codifica di qualsiasi testo ASCII con questo tool di conversione da ASCII a binario, ottale, esadecimale. I primi 32 simboli della codifica ASCII sono simboli di controllo, non stampabili. La ASCII art è una forma di disegno con i simboli dell'alfabeto ASCII. Potete esercitarvi con questo tool online. Colori Esistono diverse codifiche dei colori. Per ora ne esaminiamo due:

  • RGB (Red, Green, Blue - rosso, verde, blu): usato nei monitor a colori.
  • CMY (ciano, magenta, giallo) : usato nelle stampanti a colori. Nel modello RGB un colore è identificato dai valori delle componenti di rosso, verde, blu, codificate con 8 bit ciascuna: ogni componente (o colore primario ) ha un valore tra 0 e 255. Per codificare un colore si usano 24 bit e si rappresentano 224 colori (circa 16,8 milioni di colori). I toni di grigio hanno uguali valori di rosso, verde e blu: avremo perciò 256 tonalità di grigio.+ Il modello RGB è un modello di colore additivo, ovvero un colore si ottiene sommando i colori primari (in proporzioni variabili) fino ad ottenere il bianco = (255, 255, 255). Nel modello CMY un colore è identificato dai valori dei colori primari ciano, magenta e giallo, codificati con 8 bit ciascuno (il ciano è un azzurro turchese). Il modello CMY è un modello di colore sottrattivo, ovvero un colore si ottiene aggiungendo i colori primari (in tonalità variabili) fino ad ottenere il nero =(255, 255, 255). Il modello fisico è la miscelazione di pigmenti (inchiostri) colorati in C, M, e Y, i quali assorbono (sottraggono) colore dalla luce bianca che illumina il pigmento. In particolare, il ciano filtra (elimina) il rosso dalla luce bianca. Quindi, depositando il colore ciano su un foglio bianco, la luce riflessa dal foglio sarà priva del colore rosso. In modo analogo, il magenta e il giallo filtrano rispettivamente il verde e il blu. Se (r, g, b) è una tripla di numeri che codifica un colore nel modello RGB allora la codifica dello stesso colore nel modello CMY è: (255 - r, 255 - g, 255 – b). Analogamente, il colore (c, m, y) nel modello CMY ha codifica RGB (255 - c, 255 - m, 255 – y). I colori RGB e CMY si trovano spesso codificati in esadecimale, ad esempio, #FF0000 indica il rosso.
  • come triple (quadruple) di numeri in formato decimale ad es. color(204,153,0) oppure color(204,153,0,128) nel caso di colori trasparenti (128 è la trasparenza),
  • come codici esadecimali, ad es. #FFCC00 , 0xFFCC00 oppure 0x80FFCC00 , dove 80 indica la trasparenza. Le variabili Una variabile è un'associazione tra un nome ed un valore, cioè una coppia . Il valore di una variabile non può essere qualsiasi ma deve essere di un certo tipo, stabilito a priori. L'insieme delle variabili di un programma costituisce la memoria usata dal programma per i dati di ingresso, i risultati e per i valori calcolati nei passi intermedi dell'esecuzione di un programma Le variabili si possono rappresentare graficamente con dei riquadri: -La variabile X ha valore 3, Y ha valore 5 e Z è indefinita (non ha ancora ricevuto un valore). -I linguaggi di programmazione dispongono del comando di assegnamento per cambiare il valore delle variabili: ad esempio il comando x=10; Assegna alla variabile x il valore 10. Il valore precedente di x viene perso. In generale, il formato di un assegnamento è nome-variabile = espressione ; il cui effetto è quello di modificare il valore della variabile assegnandogli il valore dell’espressione. Un’espressione è una frase composta da variabili, valori costanti, operazioni e parentesi tonde (per determinare l’ordine di applicazione delle operazioni). Esercizio. Qual è l'effetto dell'assegnamento x=x+10? Dichiarazione delle variabili Prima di essere usata, una variabile deve essere dichiarata. Ad esempio, la dichiarazione int x = 1; introduce una variabile intera di nome x a cui si assegna inizialmente il valore 1 , mentre float y; introduce una variabile di tipo float di nome y. Una dichiarazione ha il compito di creare una variabile stabilendone il nome, il tipo dei valori che può assumere (il tipo della variabile) e un eventuale valore iniziale. Nel primo esempio, x è di tipo int , ovvero può assumere un qualsiasi numero intero rappresentabile in complemento a 2 con 32 bit e il valore iniziale di x è 1. Nel secondo esempio, y è di tipo float , ovvero può assumere un qualsiasi numero reale rappresentabile in formato IEEE 754 in precisione singola (32 bit) e non ha un valore iniziale. Il tipo della variabile è utile per determinare lo spazio di memoria necessario per memorizzare il valore della variabile (4 byte sia nel caso di valori di tipo int che di tipo float). Esempio size(400,400); background(255);

noStroke(); int x = 100; color c = color(255,0,0); final int DIAM = 50; fill(c); ellipse(x,200,DIAM,DIAM); c=color(0,255,0); fill(c); x=x+100; ellipse(x,200,DIAM, DIAM); c=color(0,0,255); fill(c); x=x+100; ellipse(x,200,DIAM,DIAM); Lo sketch disegna tre cerchi colorati. -La variabile intera x rappresenta la coordinata orizzontale dei tre cerchi, è inizializzata a 100 ed è incrementata di 100 pixel dall'istruzione x=x+100; prima di disegnare il secondo e il terzo cerchio, in modo che non vi siano sovrapposizioni. Le quattro operazioni aritmetiche si indicano con +, -, * , /. Il resto di due numeri interi si indica con %. La variabile c di tipo color, rappresenta il colore dei cerchi, è inizializzata al colore rosso e gli viene assegnato il colore verde e il colore blu prima di disegnare rispettivamente il secondo e il terzo cerchio. Si noti che DIAM non è una variabile, ma una costante (anche detta letterale): si tratta di un nome per il valore 50. Le costanti si distinguono dalle variabili per la parola riservata final. Le costanti:

  • rendono il testo più comprensibile (un numero è un numero, mentre un nome ricorda il significato che si dà al numero, in questo caso, il diametro dei cerchi);
  • facilitano le modifiche del codice (basta cambiare il valore di DIAM per cambiare il diametro dei cerchi, altrimenti si sarebbero dovute cambiare tutte le occorrenze del numero 50). Il valore di una costante non si modifica: un assegnamento di un nuovo valore a una costante genera un errore. Per convenzione, i nomi delle costanti si scrivono con lettere maiuscole, per distinguerle dalle variabili. Stringhe Tra i tipi di dati di Processing, è presente anche il tipo di dati String che comprende le sequenze finite di testo delimitate da doppi apici, come “Ciao a tutti!” Le lettere che occorrono in una stringa sono valori di tipo char. Per inserire un apice o un doppio apice dentro una stringa di testo si scrive \’ e rispettivamente \”. Nel caso di valori di tipo String, il simbolo + denota la concatenazione tra stringhe: ad es. l’espressione "abc"+"defg" equivale alla stringa “abcdefg". Altre operazioni su stringhe sono disponibili in Processing, si consulti la documentazione. Attenzione: quando si concatena una stringa con un numero di qualsiasi tipo, il numero è convertito nella stringa della sua rappresentazione decimale. Ad esempio: print("il valore di x è: “+10); provoca la stampa nella console di Processing del testo: il valore di x è: 10 I comandi print() e println() permettono di stampare un valore di qualsiasi tipo nella console di Processing (area nera nella parte inferiore dell'applicazione).