



















































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Fondamenti di informatica di Stefano mozzanti
Tipologia: Slide
1 / 59
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




















































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:
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. ...
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:
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.)
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
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.
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);
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):
(È 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”.)
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
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:
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: