




















































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
Appunti del corso di Informatica per la comunicazione (anno 2024/2025) svolto con il prof. Dondi integrati alle slide del corso e agli esercizi (con relativi diagrammi) svolti in classe. Consigliati per l'esame (Voto 30).
Tipologia: Appunti
1 / 60
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





















































Informatica per la comunicazione 17/ Termine informatica -> nel mondo anglosassone si usa il termine computer science. “Informatica” deriva dal francese informatique : disciplina che si occupa dell’elaborazione automatica di simboli (INFORMAZIONE) o Elaborazione perché l’informatica studia sistemi che sono in grado, più o meno autonomamente, di elaborare determinate informazioni o Automatica di simboli perché l’informazione che gli elaboratori, che i computer elaborano, è codificata in simboli Il processo con cui si è arrivato agli elaboratori automatici è stato lugo e tortuoso, ma è sempre stato un obbiettivo importante per l’umanità. Le ragioni che hanno spinto i ricercatori a sviluppare questi metodi sono diversi vantaggi: o Tempi di elaborazione -> le macchine sono più veloci delle persone o Affidabilità -> anche le macchine hanno mal funzionamenti, ma in genere sono più affidabili delle persone o Elaborazione operazioni meccaniche -> le azioni che le macchine svolgono sono ripetitive e non creative, si possono quindi automatizzare Altra espressione utilizzata quando l’informatica incontra le tecnologie della telecomunicazione -> Information & Communication Technology : abbiamo sistemi che non servono solo a elaborare, ma anche a scambiare e trasferire dati da un punto all’altro. Sviluppo dei sistemi automatici di elaborazione Tentativi di costruire modelli automatici per il calcolo risalgono all’antichità (uno dei primi tentativi è l’abaco): regolo calcolatore, stepped reckoner, pascalina -> nel XVII secolo per il calcolo aritmetico. I primi sviluppi interessanti si hanno nell’’800, e tre sono i momenti principali:
I momenti fondamentali della nascita dell’informatica li abbiamo nel ‘900, momento in cui vengono realizzati degli elaboratori.
certo insieme di dati, di trasformare questi dati, calcolare una soluzione. Il modo in cui risolviamo il problema (ci sono tante possibilità per risolverlo) si chiama algoritmo : indica quali sono le operazioni che dobbiamo fare per calcolare la soluzione di un problema. Il termine algoritmo deriva da un matematico persiano, al-Khwārizmī, il primo a formalizzare questo tipo di elaborazione. L’obiettivo dell’algoritmo è descrivere come facciamo a risolvere un problema.? L’algoritmo definisce la sequenza di istruzioni per elaborare i dati di input e produrre la soluzione (output) -> ad esempio, algoritmo per l’elevamento a potenza. Per essere davvero un algoritmo ci devono essere determinate proprietà: o finitezza -> è finito, non deve andare avanti all’infinito o eseguibilità -> devono esistere delle istruzioni di base che compongono la sequenza di base dell’algoritmo o correttezza -> l’algoritmo calcola davvero la soluzione giusta del problema o determinismo -> dato un certo valore input, l’algoritmo costruisce sempre la stessa risposta al problema Il concetto di algoritmo è legato a: o programma: algoritmo scritto in linguaggio comprensibile a un computer o processo: programma in esecuzione Nel momento in cui ho un algoritmo, da questo algoritmo possono discendere tanti programmi e ogni programma, quando in esecuzione, avrà tanti processi. Diagrammi di flusso Il loro scopo è descrivere gli algoritmi. Elementi costitutivi dei diagrammi di flusso: o Blocchi -> rappresentati con forme geometriche e rappresentano le fasi di un algoritmo o Linee di flusso -> collegano le fasi e descrivono il flusso dell’elaborazione nell’algoritmo, come l’elaborazione passa da un blocco a un altro Blocco di inizio e fine Blocchi di forma ovale che rappresentano l’inizio e la fine di un algoritmo. C’è un solo blocco di inizio (per garantire il determinismo), ma possono esserci più blocchi fine. Nel blocco inizio le frecce escono, in quello fine arrivano. Blocco operazione
Blocco a forma di rettangolo in cui scrivo l’operazione svolta. Arriva una freccia (o più) al blocco e ne esce una sola. Blocco di input e output La fase di input ha un parallelogramma come forma, la fase di output un “foglio” -> hanno quindi forme leggermente diverse. Nel primo blocco leggiamo un dato, nel secondo blocco quel valore lo restituiamo a qualcuno. Esempio: somma di due numeri -> Dall’inizio abbiamo la prima lettura (numero 1), poi abbiamo la seconda fase di lettura (numero 2). Si fa poi la somma ottenendo il risultato e lo restituiamo in output -> processo lineare. L’algoritmo deve avere la capacità di memorizzare dati. Un dato è una quantità di informazione memorizzabile ed elaborabile con una singola operazione. Il modo per memorizzare i dati è la variabile : contenitori di dati, spazio su un dispositivo di memoria. La variabile ha due caratteristiche: il nome (ad esempio, X) e il valore (ad esempio, 100). Il nome è fisso, il valore può cambiare. Variabili associate ad un tipo (il tipo di dati che contengono): o Int: numeri interi o String: stringhe di caratteri (frasi, parole) o Boolean: valori booleani; valori logici vero e falso Il valore contenuto in una variabile può essere modificato con un assegnamento. Nome <- < espressione > Esempio : a x assegno il valore 11
Un dato è un valore che possiamo modificare con un’unica operazione. Ci sono però alcuni casi in cui avere solo dei dati di questo tipo è limitante: ho bisogno di dati strutturati, ovvero che hanno una struttura (come quella di una tabella) che sono collegati tra di loro. Dati strutturati (immaginare una tabella): dati collegati per il tipo di informazione rappresentata. Il dato è costituito da tante parti, ma il nome è solo uno: bisogna capire come far riferimento alle singole parti (ad esempio, la tabella degli studenti totali di UNIBG e le singole parti sono studente1, studente2, eccetera). La variabile strutturata è utilizzata per memorizzare un dato strutturato. I dati strutturati sono di due tipi: o Vettore: sequenza lineare di celle o Matrice: tabella di celle Anche alle variabili strutturate associamo un nome: in questo caso x. Bisogna anche specificare il nome delle singole parti: uso il nome della variabile e al pedice in basso metto l’indice. Anche nel caso della matrice bisogna dare un nome: il nome della variabile (in questo caso x) e al pedice l’indice della riga e della colonna. Esercizio: scrivere un algoritmo che calcola la differenza tra il numero x e il numero y (da leggere in input)
Esempio lettura di 2 dati in input : scrittura di un vettore. Nella prima cella il primo numero; nella seconda cella il secondo numero; nella terza cella la somma tra i due numeri. 20/ Blocco di controllo per definire due strutture di controllo: istruzioni condizionali e iterazioni. Il blocco, dal punto di vista grafico, è rappresentato da un rombo. Arriva una (o più) freccia e ne escono più di una, creando dei percorsi: di sx e di dx. Tramite i blocchi di controllo possiamo iniziare a creare delle alternative. Si sceglie il percorso di dx o di sx in base a cosa c’è scritto all’interno del blocco di controllo, ovvero una condizione. All’interno dei blocchi di controllo facciamo dei confronti o tra il valore di una variabile e un numero o tra due variabili. Possiamo fare due confronti: numerici o tra stringhe, ovvero controlliamo che due stringhe sono uguali. Quando facciamo un confronto, l’esito della condizione può avere due possibilità: vero o falso (valore booleano). Operatori di confronto:
o Se x = 101 e y = 102 è VERO Disgiunzione (I) è vera se almeno uno dei valori a cui è applicata è vero (sarebbe or in inglese). Tramite i blocchi di controllo possiamo costruire delle strutture non lineari ma che hanno delle alternative. Le due strutture di controllo che possiamo creare: o Diramazione: ho due alternative e seguo una in base a ciò che c’è scritto nel blocco di controllo o Iterazione (ciclo): c’è un processo che viene ripetuto un certo numero di volte e, quindi, si crea una struttura ciclica che si ripete finché succede qualcosa Diramazione -> la condizione è vero o falso; se la condizione è vera seguiamo una strada e se è falsa ne seguiamo una alternativa. Esempio : scriviamo un algoritmo che o Legge due numeri o Restituisce il numero massimo Esempio : (X>=100) I (x<y) o Se x = 101 è VERO o Se x = 101 e y = 102 è VERO o Se x = 99 e y = 102 è VERO o Se x =99 e y = 2 è FALSO Esempio : scriviamo un algoritmo che legge un numero in ingesso o Se n<100, stampa in output “n<100” o Se n>=100, stampa in output “n>=100”
Esempio : Diramazione: massimo tra tre numeri. Scriviamo un algoritmo che legge tre numeri e restituisce il numero massimo. 24/ Esempio : bilancio di un’azienda o Se bilancio >= 0, attivo o Se bilancio < 0, passivo Esempio : calcoliamo l’IVA di un prodotto o Se costo > 100, IVA 20% o Se costo <= 100, IVA 10%
Esempio per calcolare 2 x : scrivere un algoritmo che, usando sol le operazioni aritmetiche di base, legga un dato x e calcoli 2x. Questi (↑) erano i blocchi che precedono l’iterazione. All’interno dell’iterazione bisogna fare le moltiplicazioni per 2 x volte. Quando la condizione sarà vera si faranno due operazioni:
Alla variabile p aggiorno il suo contenuto e contiene 2 x p. Alla variabile x assegno il valore x – 1. All’interno del rombo bisogna scrivere x >=1. Esempio di iterazione per calcolare xy^ -> invece di fare 222…2 si fa xxx…x y volte. I vettori sono sequenze di celle -> esercizio : dobbiamo leggere 10 numeri in input e ogni cella contiene un vettore. Seconda alternativa per risolvere l’esercizio con la variabile “i”. Ogni volta che si fa una moltiplicazione aggiungo 1. Mi fermo quando i raggiunge x. Ho una variabile p a cui assegno 1. Ho l’iterazione, il blocco di controllo. La variabile y è quella che mi dice quante volte devo fare l’iterazione, per questo nella condizione scrivo y>=1. Faccio poi due operazioni: o ogni volta che faccio l’iterazione tolgo 1 a y o il contenuto della variabile p lo moltiplico per x
Abbiamo un vettore composto da 10 celle (da v 0 a v 9 -> tabella a dx). Per trovare il valore massimo confronto i valori nella tabella e individuo una variabile max. Dopo aver messo il blocco inizio bisogna definire i valori delle due variabili: o i <- 0 o max <- v 0 (un valore qualunque del vettore v) Costruiamo poi l’iterazione, mettendo il blocco controllo (rombo) e imposto i due casi: il caso in cui la condizione è falsa e il caso in cui è vera. L’idea è che, quando faccio l’iterazione, ogni volta, controllo il contenuto di ogni cella -> mi fermo quando finiscono le celle. La condizione è quindi i <=9. Quando l’iterazione si concentra su una cella bisogna confrontarla con il massimo: ci sono quindi delle diramazioni -> si ha un altro rombo: bisogna capire se il massimo letto fino a questo punto è cambiato o no. Scrivo quindi vi > max. o Se la condizione è vera, in vi ho letto un numero più grande di tutti gli altri e aggiorno il blocco o Se è falsa non devo aggiornare nulla e metto il blocco di output: devo restituire max e fine In entrambi i casi devo passare alla cella successiva, aumentando di 1 (i <- i + 1) Esercizio : scrivere un algoritmo per determinare la somma dei primi 5 numeri > 10 di un vettore. Ho un vettore e devo leggere le varie celle (tabella): 1 19– si 8 - no 2 11 - si 0- no 1-no 3 22-si 4 23- si V 0 12 V 1 10 V 2 19 è il max V 3 16 V 4 V 5 V 6 V 7 V 8 V 9
1-no 5 11- si Ho 3 variabili: i , t , h -> tutte con valore 0 (i <-0). La condizione può essere vera o falsa: o Per vedere se è vera devo leggere vi e vedere se è maggiore di 10. Anche questa diramazione può essere vera o falsa
Sub (sottrazione) 0110 1001 Processori con codifiche identiche: compatibili. Per riuscire a costruire programmi abbastanza generali sono stati costruiti dei linguaggi formali (non linguaggio macchina): linguaggi di programmazione -> permettono la scrittura di programmi eseguibili da una macchina. I linguaggi di programmazione di alto livello (i più usati) definiscono operazioni più complesse delle istruzioni primitive e sono più simili ai comportamenti naturali. Problema: la macchina potrebbe non capire il linguaggio di programmazione di alto livello, è quindi necessario ci sia un processo di traduzione. Ci sono diversi tipi di traduttori, ad esempio il compilatore: traduce da un linguaggio di alto livello ad un linguaggio di macchina. Abbiamo il codice sorgente che il compilatore legge e traduce e da lì genera il codice eseguibile (traduzione di un programma scritto in alto livello a linguaggio macchina). 27/ La CPU è costituita da transistor. Ogni transistor può avere un segnale in uscita: o Tensione alta (circa 3,3 V) o Tensione bassa È importante che siano due perché l’aritmetica dei computer è binaria. Nello sviluppo delle CPU la quantità di transistor continua ad aumentare: più sono, più il potere di calcolo e memorizzazione migliore. Un ingegnere, Moore, formula una legge (legge di Moore): se noi guardiamo la produzione di CPU, quello che succede è che la quantità di transistor su una CPU raddoppia circa ogni due anni. La CPU, per funzionare, ha bisogno di avere delle piccole memorie, dei registri per la memorizzazione di istruzione e dati: o IR ( Instruction Register ) o PC ( Program Counter ) o PSW ( Process Status Word ) La CPU è suddivisa in 2 parti fondamentali: o ALU -> fa un certo tipo di istruzioni o Unità di controllo -> è la componente che controlla il ciclo macchina e la fase di elaborazione o Queste due componenti comunicano tra di loro ALU (Arithmetic Logic Unit) -> svolge tutte le elaborazioni logiche e aritmetiche o Operazioni aritmetiche: somma, sottrazione, moltiplicazione, divisione o Operazioni logiche; confronto di due dati -> =,<,>, AND, OR L’ALU è inoltre dotata di alcuni registri per la memorizzazione dei dati di input/output.
Unità di controllo -> coordina il funzionamento della CPU e trasferisce i dati dalla memoria. Ci sono due registri fondamentali dell’unità di controllo: o PC: registro contatore delle istruzioni. Al suo interno memorizza un indirizzo di una cella di memoria che al suo interno contiene un’istruzione che deve essere eseguita o IR: contiene una copia dell’istruzione da eseguire che è stata letta accedendo alla memoria. La CPU scrive una copia del codice dell’istruzione nel registro IR La CPU esegue 4 fasi in modo ciclico (ciclo macchina o ciclo CPU):