
















































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
Programmazione: - introduzione agli algoritmi e alla programmazione, - rappresentazione di algoritmi tramite flowchart, - introduzione a Processing, - variabili, - tipi di dato, - grafica e trattamento delle immagini, - rilevamento degli errori, testing e debugging, - iterazioni, cicli, - istruzioni di selezione, - eventi, - strutture dati, - stringhe e trattamento del testo, - funzioni, - oggetti e classi, - file di testo, - introduzione a Java. Informatica: • concetti di base dell'informatica come la codifica binaria, rappresentazione di colori e immagini ed altri applicati nel contesto di programmazione; • componenti hardware fondamentali e periferiche; interfacce e tecnologie. Voto 30L
Tipologia: Appunti
1 / 56
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!

















































Che cos’è “Processing”? Processing è un semplice ambiente di programmazione che consente ai programmatori di sviluppare, rapidamente, applicazioni orientate alla visualizzazione. É stato pensato principalmente per artisti e designer in quanto ci sono molte istruzioni e comandi che permettono di lavorare con la grafica e la immagini. Infatti, viene utilizzato per installazioni su larga scala, grafica animata e dati complessi visualizzazione. Processing usa la sintassi di Java. Quindi in sé Processing non è un linguaggio di programmazione, ma un ambiente di sviluppo. Che cos’è un programma? Ogni volta che si usa un computer (calcolatore), si eseguono dei programmi: ● Sistemi Operativi: windows/linux ● Applicativi: word, excel, notepad Alcuni programmi vengono eseguiti automaticamente, senza che l’utente ne abbia il controllo (o se ne accorga): virus, antivirus, driver, vari servizi. Un programma può essere definito come una serie di operazioni elementari, eseguite in sequenza, che trasformano un insieme di dati di ingresso (input) in un insieme di dati di uscita (output). La programmazione è l’attività di progettare e sviluppare programmi per un calcolatore. Informalmente, è come se il programmatore “insegnasse” al calcolatore come svolgere un determinato compito (ad eccezione di machine learning) Scopo della scrittura di un programma è la risoluzione automatica di un problema. Il risultato della programmazione è un programma scritto in un linguaggio di programmazione. Linguaggi di programmazione L’informazione (istruzioni e dati) all’interno di un calcolatore è codificata in rappresentazione binaria , ovvero con sequenze di 0 e di 1. Quando un programma è in esecuzione, è memorizzato nella memoria principale; esso è rappresentato da una serie di numeri binari che codificano le istruzioni eseguibili dall’unità centrale. Tuttavia, scrivere un programma in termini di sequenze di 0 e di 1 o utilizzando soltanto semplici istruzioni (ad esempio copia un numero, somma due numeri) diventa presto impraticabile. L’utilizzo di un linguaggio di programmazione semplifica l’attività del programmatore, consentendo di esprimere istruzioni complesse in modo semplice. Un linguaggio di programmazione permette di descrivere una procedura (sequenza di operazioni) nel modo simile al nostro ragionamento. Un linguaggio di programmazione è costituito da:
● Un alfabeto con cui viene costruito un vocabolario ovvero un insieme di parole chiave ● Una grammatica ovvero un insieme di regole sintattiche per l’uso corretto delle parole del linguaggio. A differenza dei linguaggi naturali, le regole dei linguaggi di programmazione (linguaggi formali) sono rigide, per garantire l’assenza di ambiguità. Progettare un software, di solito, comporta i seguenti passi: ● Formulare il problema (specifica dei requisiti) ● Capire il problema e scomporlo in parti gestibili (analisi) ● Progettare una soluzione (algoritmo) ● Implementare la soluzione (scrittura del codice) ● Testare la soluzione e correggere eventuali errori (verifica, testing e debugging) ● Tenere aggiornato il programma (manutenzione) Quindi per la risoluzione di un problema è fondamentale utilizzare un algoritmo, cioè una sequenza di passi discreti , di lunghezza finita, deterministici (ogni passo dell’algoritmo deve essere ben stabilito) e ripetibili che producono la soluzione del problema.
point (X, Y) X = coordinata orizzontale (cioè, distanza lungo l'asse X a partire dall'angolo in alto a sinistra della tela) Y = coordinata verticale (cioè, numero di pixel lungo l'asse Y partendo dall'angolo in alto a sinistra) Line Per visualizzare una linea si usa il comando: line(X1, Y1, X2, Y2) X1, Y1 = punto di partenza della linea X2, Y2 = punto di fine Ogni punto ha bisogno di 2 coordinate NB! Se il punto di fine della linea è fuori dal canvas non viene alcun errore, ma viene mostrata metà linea. Questo vale anche per le altre istruzioni di grafica Rect Per visualizzare un rettangolo, si usa il comando: rect (X1, Y1, W, H) X1, Y1 = punto di partenza W = larghezza H = altezza Larghezza * altezza = dimensioni (in pixel) di il rettangolo Elipse Per visualizzare un’ellisse, si usa il comando: ellipse(X1, Y1, W, H) X1, Y1 = punto iniziale (centro dell'ellisse) W = larghezza H = altezza Se W = H otteniamo un cerchio Quad quad(X1, Y1, X2, Y2, X3, Y3, X4, Y4); Es: quad(50,50,150,50,150,150, 50,150);
Arc arc (x, y, width , height , start, stop); X, Y = punto iniziale (centro dell’arco) Width = larghezza dell'ellisse dell'arco di default Height = altezza dell'ellisse dell'arco di default Start = punto di inizio Stop = punto di fine arc(100, 100, 150, 150, 0, 3.14); arc(100,100,150,150, 3.14, 6.28); arc(100,100,150,150, 1.57, 4.71); Ellisse e rettangolo (avanzato) Esistono quattro diverse modalità di progettazione dell'ellisse: CENTER, RADIUS; CORNER; CORNERS Quando usiamo il comando ellipse(X1, Y1, W, H) CENTER è l'impostazione predefinita. Per cambiare la modalità di progettazione bisogna mettere prima di ellipse(X1, Y1, W, H) il comando ellipseMode(). ● La modalità predefinita è ellipseMode(CENTER) , che interpreta i primi due parametri di ellipse(X1, Y1, W, H) come il punto centrale della forma, mentre il terzo e il quarto parametro sono la sua larghezza e altezza. ● Anche ellipseMode (RADIUS) utilizza i primi due parametri di ellipse(X1, Y1, W, H) come punto centrale della forma, ma utilizza il terzo e il quarto parametro per specificare metà della larghezza e dell'altezza delle forme.
Per modificare lo spessore del contorno usare il comando: strokeWeight (x); x è un numero Per rimuovere il riempimento della forma noFill (); Per aggiungere il riempimento della forma fill (R,G,B); NB! Tutti questi comandi si applicano prima di disegnare la forma! L'ordine delle sequenze è importante !! Codifica delle immagini Per codificare le immagini è necessario seguire due fasi: ● Trasformazione di un’informazione continua in una collezione di informazioni discrete; ● Codifica approssimata delle informazioni discrete. Per quanto riguarda la codifica il caso più semplice è quello delle immagini in bianco e nero senza livelli di grigio. Si procede suddividendo l’immagine mediante una griglia formata da righe orizzontali e verticali a distanza costante. I quadratini della griglia sono chiamati pixel (picture elements) e sono intesi come unità costituenti dell’immagine. La codifica di un’immagine consiste nella codifica dei pixel in cui viene scomposta l’immagine. Assumiamo che un pixel sia codificato con un singolo bit che vale 0 se nel pixel il bianco è predominante e 1 se nel pixel il nero è predominante. È necessario definire delle convenzioni per ordinare la griglia dei pixel in una sequenza. Per esempio si può definire che i pixel siano ordinati dal basso verso l'alto e da sinistra verso destra Con questa convenzione la rappresentazione della figura sarà data dalla sequenza di zeri (0) ed uni (1) 0000000 0111100 0110000 0100000 Non sempre il contorno della figura coincide con la griglia. Quella che si ottiene nella codifica è un'approssimazione della figura originaria. Se riconvertiamo la sequenza 0000000011110001100000100000 in immagine otteniamo La rappresentazione sarà più fedele all'aumentare del numero di pixel, ossia al diminuire delle dimensioni dei quadratini della griglia in cui è suddivisa l'immagine. Il numero di pixel in cui è suddivisa un'immagine si chiama risoluzione e si esprime con una coppia di numeri ad es. 640 × 480 pixel (orizzontali × verticali).
Ogni dispositivo ha la sua risoluzione massima 640 x 480, 1920 x 1200, 3000 x 2000. Alcune hanno dei nomi, come per esempio: ● VGA - 640× ● Full HD - 1920× Non è possibile visualizzare l’immagine più grande della risoluzione dello schermo. Assegnando ad ogni pixel 0 oppure 1 è possibile codificare solo immagini senza livelli di chiaroscuro. Le immagini in bianco e nero hanno diversi livelli di intensità di grigio. Per ogni pixel si stabilisce il suo livello medio di grigio. A tale livello viene assegnato convenzionalmente un numero, per esempio in intervallo da 0 a 255, in cui 0 = nero e 255=bianco. In modo simile possiamo codificare le immagini a colori. Si tratta di individuare un certo numero di sfumature di colore differenti e di codificare ogni sfumatura mediante un'opportuna sequenza dei numeri. Ad esempio, i monitor utilizzano un numero di colori per pixel che va da 256 fino a sedici milioni di colori. Ci sono vari standard della codifica dei colori. Ogni sistema di rappresentazione dei colori si basa su variabili numeriche che possono essere rappresentate su assi cartesiani, descrivono degli spazi geometrici. Gli spazi colore si suddividono in due gruppi: ● spazi relativi (device dependent) p.e. RGB ● spazi assoluti (device independent) p.e. Standard CIE Esempi: ● RGB dove Red (rosso), Green (verde), Blue (blue) ● CMY/CMYK dove Cyan (ciano), Magenta e Yellow (giallo), K (nero) ● HSL dove H = Hue (tinta o tonalità), S = Saturation (saturazione), L = Lightness (luminosità) Sistema tricromatico RGB Ogni pixel contiene tre valori (R,G e B) che vengono sommati per ottenere il colore voluto. Dal punto di vista matematico, lo spazio colore RGB è uno spazio tridimensionale in cui ciascuna variabile può variare tra 0 (assenza) e 1 (punto di massima intensità), oppure da 0 a 255. Viene impiegato in tutti i dispositivi di output a colori in cui si sommano luci (schermi, proiettori, etc.). È un sistema additivo, perché le regole di composizione dei colori di base ricalcano le composizioni di luci. Spazio colore CMY / CMYK E’ il sistema usato per la stampa: di fatto, nella stampa, si usa un sistema quadricromico (CMYK), dove la lettera K corrisponde al nero. Risulterebbe troppo dispendioso impiegare
impostando i parametri max , max1 , max2 , max3. Dopo aver modificato l'intervallo di valori per i colori con codice come colorMode (HSB, 360, 100, 100) , tali intervalli rimangono in uso finché non vengono nuovamente modificati in modo esplicito. Ad esempio, dopo aver eseguito colorMode (HSB, 360, 100, 100) e quindi essere tornato a colorMode (RGB) , l'intervallo per R sarà da 0 a 360 e l'intervallo per G e B sarà da 0 a 100. Per evitare ciò , sii esplicito sugli intervalli quando si cambia la modalità colore. Ad esempio, invece di colorMode (RGB) , scrivi colorMode (RGB, 255, 255, 255). Quindi la sintassi è: colorMode(MODE); MODE =RGB o HSB colorMode (MODE, a); MODE = RGB o HSB a = intervallo per tutti gli elementi di colore colorMode (MODE, x,y,z); MODE = RGB o HSB x, y, z sono valori massimi per ciascuna coordinata separatamente Usare HSB è utili quando bisogna cambiare solo la tinta, ma non la saturazione e l’intensità. ES: Errori Se lo sketch non viene eseguito, probabilmente è stato fatto un errore di battitura o un errore di sintassi. Per comprendere di che errore si tratta è bene controllare il messaggio nella Console. Se esso è di colore rosso significa errore e quindi il programma non può essere eseguito. Per maggiori informazioni se fai clic sulla “Barra degli errori”. Se sotto il codice compare una sottolineatura rossa, significa errore e si possono ottenere alcuni suggerimenti, se si va con il cursore su di esso (o cliccaci sopra). Invece se è di colore arancione il programma può essere eseguito. Gli errori possono verificarsi per diversi motivi. Il Debugging è il processo di individuazione e risoluzione dei bug (difetti o problemi che impediscono corretto funzionamento) Tipi di errori:
Usiamo un simbolo di "=" per assegnare un valore a una variabile: si assegna il valore dal lato destro del = alla variabile alla sua sinistra. L'espressione a destra di "=" viene valutata prima dell'assegnazione: x = 5 + 4; prima fa 5 + 4 e poi assegna il risultato (9) a x. Ci sono tre modi equivalenti per aumentare di uno: x=x +1; x+=1; x++; NB! Errori frequenti: ● Non funziona in modo opposto! ad esempio, 5 = x; è un ERRORE !!! ● Ovviamente non è consentito assegnare un valore a un altro valore, ad es. 1 = 1; ERRORE!!! ● Non è consentito avere due dichiarazioni con lo stesso nome in una blocco (≈lo stesso programma): int x; x = 3; int x = 4; ERRORE!!! ● Non è consentito utilizzare una variabile senza inizializzazione: int x; point(x, 10) ; ERRORE "La variabile locale x potrebbe non essere inizializzata" x=5 x= 7 y=5 y= 7. si cerca di inserire si riempi la y si può inserire un int un float in un int prima di dichiarla in un float Altri operatori sono: ● + (più) ● - (meno) ● * (moltiplicare) ● / (divisione) ● % (modulo), restituisce il resto della divisione, ad esempio, 5% 3 = 2, 7% 3 = 1
Utilizza "parentesi tonde" () per espressioni più complesse, come ad esempio, x = 2 * (5 + 3) per fare prima 5 + 3 e poi moltiplicare il risultato per 2 e assegnare il risultato (16) a x. Nel fare le operazioni vale l’ordine predefinito degli operatori (come in Math) x = 3 +4 * 5; // prima moltiplicazione poi addizione! y = (3 + 4) * 5; // se vuoi che l'aggiunta sia la prima, usa le parentesi Alcune variabili esistono senza la necessità di dichiararle, come per esempio width e height che sono 2 variabili di tipo int che contengono informazioni circa le dimensioni della tela (canvas). ES: line (0,0,width,height); NB! Quando si utilizzano operatori aritmetici è importante ricordare sui tipi: ● le operazioni su 2 int danno un int ● le operazioni su 2 float danno un float ● le operazioni su un float e un int danno un float Random values random (X) genera un valore casuale (float) nell'intervallo da 0 a X. Ad esempio, random (3) può produrre qualsiasi numero in virgola mobile positivo <3. NB! Di solito non abbiamo bisogno di float ma di valori int int r; r = (int) casuale (3); chiediamo la conversione esplicita di un float in un valore intero. Funzioni speciali e animazioni La funzione è un pezzo di codice identificato tipicamente con un nome e può essere utilizzato uno o più volte in un programma. Le funzioni vengono usate per: ● per migliorare la gestibilità del programma ● più facile leggere il codice ● per la riusabilità del software ● rendere un programma più modulare ● ridurre la ridondanza del codice ● aggiornare il codice più facilmente ● ridurre la possibilità di errori
Per interrompere l'esecuzione continua del codice all'interno di draw () , utilizzare noLoop () e loop (). Se noLoop () viene utilizzato per interrompere l'esecuzione del codice in draw () , loop () farà sì che il codice all'interno di draw () riprenda a funzionare continuamente. È comune chiamare background () vicino all'inizio del ciclo draw () per cancellare il contenuto della finestra. Per esempio i pixel disegnati nella finestra sono cumulativi, l'omissione di background () potrebbe produrre risultati indesiderati. Può esserci solo una funzione draw () per ogni schizzo e draw () deve esistere se si desidera che il codice venga eseguito continuamente o per elaborare eventi come mousePressed (). A volte, potresti avere una chiamata vuota a draw () nel tuo programma, come nel seguente esempio: void setup() { size(200, 200); } // Sebbene qui sia vuoto, draw () è necessario così // lo sketch può elaborare gli eventi di input dell'utente // (in questo caso la pressione del mouse) void draw() { } void mousePressed() { line(mouseX, 10, mouseX, 90); } NB! Può esserci un solo draw () e un setup () nel programma Dichiara e inizializza alcune variabili ● questa parte del programma viene eseguita UNA SOLA VOLTA! Imposta le dimensioni della tela e il colore. ● questa parte del programma viene eseguita UNA SOLA VOLTA! Disegna un cerchio ● questa parte del codice viene eseguita molte volte ● ogni volta che disegna un cerchio ● ogni volta che viene chiamata questa funzione, le coordinate del cambiamento del cerchio!
Bit = binary digit (in italiano, cifra binaria) All’interno della memoria e, in generale, del calcolatore l’informazione è rappresentata come sequenze di bit. Il bit è l’unità elementare dell'informazione trattata da un computer. Un bit può rappresentare due informazioni, par esempio: vero o falso, acceso o spento, bianco o nero (vedi lezione precedente)… La rappresentazione logica del bit è costituita dai soli valori 0 e 1. L’adozione della rappresentazione binaria si deve alla semplicità di realizzare fisicamente un elemento con 2 stati anziché un numero superiore e alla corrispondenza diretta con i valori logici vero e falso. Per poter rappresentare un numero maggiore di informazioni è necessario utilizzare sequenze di bit. Per esempio, per rappresentare quattro informazioni diverse possiamo utilizzare due bit che ci permettono di ottenere quattro configurazioni distinte: 00 01 10 11 Il processo secondo cui si fa corrispondere ad un’informazione una configurazione di bit prende il nome di codifica dell'informazione. Sequenze di bit sono raggruppate in entità più vaste, che contengono generalmente un numero di bit pari ad una potenza binaria, pari cioè a 2^n. Il più noto di tali raggruppamenti è il byte, corrispondente ad 8 bit, che costituisce l’unità di misura più utilizzata in campo informatico. Ad esempio le dimensioni della memoria si misurano in multipli del byte. Con N bit si possono codificare 2^N informazioni differenti. Infatti con 1 bit posso codificare fino a 2 valori diversi, per esempio: bianco e nero. 1 bit -> 0, 1 Con 2 bit posso codificare fino a 4 valori diversi, per esempio: le 4 stagioni 2 bit -> 00, 01, 10, 11 Con 3 bit posso codificare fino a 8 valori diversi, per esempio: giorni della settimana (con l’ottava codifica inutilizzata). 3 bit -> 000, 001, 010, 011, 100, 101, 110, 111
Esempio: codifica di un video in formato RGB 30 secondi del video in risoluzione 300 x 200 pixel, viene visualizzata con 25 fps (frames per second); la tavolozza (palette) di ogni frame è definita da combinazione di 255 livelli di blue, 255 livelli di rosso e 255 livelli di verde, e quindi ogni pixel è formato da 8x8x8 = 24 bit. Ho bisogno di 300 x 200 x 24 x 30 x 25 = 1.080.000.000 bit cioè circa 135 MB (megabyte) per memorizzare il video. Esempio: codifica di un video d’epoca 30 secondi del video in risoluzione 300 x 200 pixel, viene visualizzata con 25 fps (frames per second); la tavolozza (palette) di ogni frame è definita da combinazione di 255 livelli di grigio, e quindi ogni pixel a bisgono di 1 byte (8 bit). Ho bisogno di 300 x 200 x 8 x 30 x 25 = 360000000 bit cioè circa 45 MB (megabyte) per memorizzare il video. LEZIONE 5 & 6 Istruzioni condizionali Le istruzioni condizionali consentono al programmatore di specificare un blocco di istruzioni (semplice o composta) che viene eseguito solo quando si verifica una certa condizione. Gli elementi delle istruzioni condizionali sono: ● Test: un'espressione il cui valore determina se eseguire la dichiarazione associata alla dichiarazione condizionale; ● Body: l'istruzione che viene eseguita in caso di verifica del test. Sintassi: if (test) { statements } test = qualsiasi espressione valida che restituisce true o false statements = una o più istruzioni da eseguire se il test è vero Quindi la funzione if(){} consente al programma di prendere una decisione su quale codice eseguire. Se il test restituisce true , le istruzioni racchiuse nel blocco vengono eseguite e se il test restituisce false le istruzioni non vengono eseguite. If può essere annidato in altri if. Come scrivere la condizione del test? Espressione relazionale è un'espressione che può essere valutata come vera o falsa ed è costituita da due valori che vengono confrontati con un operatore relazionale. Gli operatori sono: ● >, <, ● > = (minore o uguale),
● <= (maggiore o uguale), ● == (equivalente), NON CONFONDERLO CON ASSIGMENT "=" ●! = (Non equivalente) Espressioni razionali più complesse possono essere ottenute utilizzando: ●! - negazione ● && - E ● || - OR Per esempio: ● (y> 2) && (y> 3) è vero solo se y è maggiore di 2 ey è maggiore di 3 ● (y> 2) II (y> 3) è vero quando y è maggiore di 2 o y è maggiore di 3 (ovviamente se è vero anche quando y è maggiore di 2 ey è maggiore di 3) ●! (Y> 2) è vero quando y è uguale o minore di 2 i non contiene nulla in questo caso restituisce 2 perchè si sta assegnando a i il valore di j. Se si vogliono confrontare si deve usare “==”
Estende la struttura if consentendo al programma di scegliere tra due o più blocchi di codice. Specifica un blocco di codice da eseguire quando l'espressione in if è falsa. NB! La differenza tra questi due codice è che nel primo senza le parentesi {} se la condizione è vera viene eseguito solo il primo codice dopo if(). Nel secondo caso se la condizione è vera allora viene fatto tutto quello nelle parentesi {}.