Lezione 1
Video rappresenta evoluzione del valore dei brand a partire dagli anni 2000. 2018 serie di marchi legati a mondo dell’informatica in qualche modo. Valore dell’informazione è sempre più importante.
Nessuna di queste aziende può essere immaginata senza sito web.
Cos’è e come gestire l’informazione dato
La prima distinzione da fare è iniziare a distinguere cos’è il dato (elemento oggettivo riferito a un elemento o evento) e cos’è l’informazione (è un modo di interpretare il nostro dato nel momento in cui facciamo dei collegamenti tra i dati e diamo un obiettivo).
Es. concetto temperatura 38°.
38° è un dato se lo colleghiamo ad altri dati e gli diamo un obiettivo ha un’interpretazione e rappresenta un’informazione diversa. Se 38° è temperatura che ci viene rilevata prima di entrare in un ristorante non mi farà entrare mentre se è la temperatura rilevata su un pezzo di carne significa che dovrà continuare a cuocere.
Nel momento in cui diamo un collegamento ad altri dati e gli diamo un obiettivo ha un’interpretazione, quindi rappresenta un’informazione diversa.
Nel momento in cui diamo significato a dati oggettivi (= ad esempio un numero), nel momento in cui creiamo una finalità possiamo costruire una rappresentazione dei dati in modo da estrarre conoscenza. Possiamo a quel punto definire la conoscenza, elaborarla e interpretarla.
L'informazione ha l'obiettivo di creare una rappresentazione dei dati in modo da estrarre conoscenza tramite la sua elaborazione oppure migliorare la loro interpretazione da parte dell'utente.
Il modo e la forma in cui trattiamo i dati diventano fortemente dipendenti dagli obiettivi che abbiamo.
Informatica e algoritmi
Possiamo definire l’informatica come uno studio sistematico degli algoritmi che descrivono e trasformano l’informazione -> teoria, analisi, progetto, studio dell’efficienza, realizzazione e applicazione.
«L’informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione.»
È uno studio sistematico, l’informatica non è un far andare le cose, vi stanno dietro teorie, è una scienza di gestione dell’informazione che si occupa di algoritmi (= serie di passi per elaborare l’informazione). Non è solo un modo per descrivere l’informazione ma anche un modo per trasformarla. Esempio più semplice di trasformazione è gestione di schermi di diverse dimensioni, richiede di trasformare la stessa info per trasformarla in modo diverso. L’informazione è qualcosa con cui abbiamo a che fare tutti i giorni.
L’informatica è un modo per rappresentare e gestire l’informazione.
L’informatica è lo studio sistematico di tecniche e metodi per:
- Rappresentare l’informazione: astrarre i concetti importanti da quelli trascurabili, per modellare opportunamente la realtà di interesse.
- Elaborare e gestire l’informazione: uso e trasformazione dell’informazione in modo funzionale agli obiettivi.
Elaborazione per l’informazione, parliamo di trasformazione automatica cioè capire come velocizzare quest’informazione perché spesso bisogna gestire grandi quantità di calcoli.
In caso di grandi quantità di dati e sia necessaria un'elaborazione veloce dell'informazione, si ricorre all'uso di strumenti automatici: calcolatori elettronici.
Passaggio da gradi Celsius a Fahrenheit è una forma di trasformazione, elaborazione dell’informazione. Se la facciamo a mano è trasformazione dell’informazione, quella in cui ci focalizziamo nell’informatica è una trasformazione automatica, cioè capire come possiamo velocizzare quest’informazione, perché in alcuni casi avremo da elaborare grandi quantità di dati.
Il concetto di elaborare grandi quantità di dati è alla base dell’informatica perché c’erano dei calcoli che non si potevano fare a mano, richiedevano tempo, riuscire a farle con un calcolatore ci permette di velocizzare le cose. Quindi abbiamo dei calcolatori elettronici (computer) che non fanno altro che ricevere una serie di informazioni d’ingresso (informazioni e non dato, perché abbiamo già trasformato e dato un’interpretazione iniziale) lo passiamo a un calcolatore con cui analizziamo questi dati e da questo ricaviamo un’informazione in uscita e una conoscenza, può essere uno, può essere l’altro, può essere entrambi.
Es. temperatura è informazione d’ingresso, c’è un calcolatore che elabora l’informazione velocemente e da una serie d’informazioni in uscita (visualizzazione della temperatura) e la conoscenza (risposta data a utente). Ci sono altri sistemi che sono un po’ più complessi: es telefono ha una sua telecamera quello che faccio quando guardo telefono leggo come informazione d’ingresso la visualizzazione del volto e da quell’informazione in uscita (se persona corrisponde o è salvata) e conoscenza (percorso che viene sbloccato) -> sistema di elaborazione delle informazioni.
Calcolatori elettronici
I calcolatori elettronici permettono: (aspetti tra loro collegati, uno richiede l’altro)
- Una rappresentazione efficace dell’informazione.
- Un’elaborazione sistematica, veloce e pratica dell’informazione.
Il calcolatore esegue algoritmi per l'elaborazione ed utilizza elementi di memoria per immagazzinare le informazioni che sta elaborando. Si può analizzare qualsiasi sistema informatico e si vedrebbe che si riduce a questo: fornire informazione, avere algoritmo che la elabora, avere elementi di memoria che servono a immagazzinare informazione e su questo arrivare ad avere informazione d’uscita con una conoscenza.
Se vogliamo progettare un sistema dobbiamo definire qual è l’obiettivo della nostra elaborazione e capire come gestire elaborare l’informazione per arrivare a una soluzione automatica (algoritmo) attraverso l’uso di un calcolatore.
La specifica è un linguaggio naturale comprensibile a una persona, mentre l’algoritmo è comprensibile al calcolatore. Umano ha problema di capire come convertire il suo problema in un algoritmo comprensibile dal suo elaboratore.
Vedremo come passare dalla specifica di un problema alla sua soluzione automatica (algoritmo) attraverso l’uso di un calcolatore:
- La specifica è una descrizione semi-formale del problema.
- È necessario passare dalla specifica ad un algoritmo che risolve il problema dato.
- Infine affinché l’algoritmo trovato sia eseguibile dal calcolatore dovrà essere definito in un linguaggio comprensibile al calcolatore stesso.
- Capiremo come rappresentare l’informazione.
Definizione di algoritmo
Un algoritmo è una sequenza finita di operazioni elementari che sono eseguibili dal calcolatore e non ambigue che giunge certamente a terminazione.
L’algoritmo permette di risolvere uno specifico compito o problema e deve seguire queste caratteristiche: caso costruzione Lego, Ikea e preparazione ricetta -> sequenza di operazioni elementari, sono degli algoritmi? No, alla fine serve momento di interpretazione delle cose che potrebbe non portare allo stesso identico risultato per il caso delle istruzioni, per le ricette invece è una sequenza di operazioni elementari sono comprensibili ma non è detto che siano non ambigue, sequenza di passi ma non è un algoritmo finché non diamo informazioni in più che lo rende non ambiguo. Inoltre per le istruzioni è necessario essere in grado di decifrare i disegni, interpretarli.
L’esecutore di questi passi è una persona e non un calcolatore (è molto complesso far comprendere un linguaggio grafico ad un calcolatore). L’esecutore è una persona che conosce la lingua italiana. I passi sono spesso non precisi ed ambigui, richiedendo quindi il buonsenso dell’esecutore.
Prodotto di due numeri interi positivi tramite somme ripetute
Altro esempio: Prodotto di due numeri interi positivi tramite somme ripetute.
- Leggi A.
- Leggi.
- Somma A a sé stesso B volte.
- Scrivi il risultato.
È qualcosa che è semplice ma non intuitivo, abbiamo capito cosa fare ma non è detto che sia non ambiguo, stiamo usando operazioni non elementari.
I passi sono definiti in modo che possano essere eseguiti senza ambiguità?
- Abbastanza (ma non ancora in modo completo).
I passi sono comprensibili ad uno specifico esecutore (cioè il calcolatore)?
- No, l’esecutore è ancora una persona che conosce la lingua italiana.
Il nostro algoritmo deve avere una formulazione che non sia specifica per una serie sola di valori ma deve essere un algoritmo che risolve in modo completo il problema che vogliamo risolvere, risolvere in modo completo -> gestire gli errori e deve funzionare per ogni valore ammesso per la specifica.
La descrizione di un algoritmo per un esecutore deve avere una formulazione generale.
Alcune osservazioni importanti:
- Gli algoritmi prevedono particolari passi destinati ad acquisire i valori dei dati da utilizzare ed elaborare in ogni specifica esecuzione.
- La soluzione individuata deve essere generale, cioè non deve valere solo per alcuni valori predefiniti dei dati.
- La soluzione deve funzionare per ogni valore ammesso dalla specifica.
Esempio:
Un algoritmo per calcola il prodotto di due numeri per somme ripetute non eseguirà tale calcolo solo per due valori predefiniti MA sarà in grado di eseguire il calcolo per una qualsivoglia coppia di numeri acquisiti dall’utente.
Dal momento in cui si programma un sito web si deve ipotizzare che persona possa immettere informazioni fuori dalla specifica.
Rappresentazione di un algoritmo
Rappresentazione di un algoritmo:
- Descrizione delle operazioni eseguibili e dei dati su cui agiscono le operazioni.
- Descrizione di tutte le possibili sequenze di operazioni da eseguire per risolvere il problema dato (flusso di controllo).
- Deve essere univoco (sia da parte del programmatore che dell’esecutore) il modo di andare da dati in ingresso a dati di uscita (flusso di esecuzione).
Flusso di controllo: la descrizione a priori di tutte le possibili sequenze nell’esecuzione dei passi dell’algoritmo, in particolare di operazioni in alternativa e di operazioni da ripetere più volte ciclicamente.
Flusso di esecuzione: la sequenza di operazioni effettivamente eseguite durante una particolare esecuzione dell’algoritmo e che dipende dagli specifici valori che i dati assumono in quell’esecuzione.
Faccio questa operazione se il mio numero A è maggiore di 5, nel flusso di controllo manca da definire cosa faccio se non è maggiore di 5, devo definire che in quel caso magari non eseguo operazioni. Nel momento in cui fornisco dei dati andrò a costruire un percorso nel flusso di controllo che dipenderà dalla gestione di queste situazioni.
Flusso di controllo definito come una rappresentazione generale statica dell’algoritmo dove descriviamo tutte le possibili sequenze, andiamo a descrivere la sequenza di passi, la selezione, ecc.
Flusso di esecuzione sono operazioni eseguite di volta in volta dato un valore che viene specificato, è un’analisi dinamica di quello che succede dati dei valori.
Proprietà dell’algoritmo
Quali sono le proprietà che deve avere un algoritmo. L’ideale è che l’algoritmo dia la soluzione al compito a cui è stato predisposto, compito è descrizione dell’algoritmo passato al calcolatore. Il calcolatore esegue specifica senza sapere se sia giusto o sbagliato è compito del programmatore se algoritmo sia giusto o sbagliato e il calcolatore arriva alla soluzione dell’algoritmo non del problema.
L’algoritmo ottiene la soluzione del compito cui è preposto.
- Il calcolatore eseguirà l’algoritmo a prescindere che sia giusto o sbagliato; è compito del programmatore garantire che l’algoritmo sia corretto.
L’algoritmo perviene alla soluzione del problema nel modo in cui è predisposto.
- Il calcolatore arriverà alla soluzione nel modo in cui è stato programmato; è compito del programmatore definire come ottenere un modo più veloce o come usare la minima quantità di risorse fisiche.
Se l’algoritmo arriva a una soluzione «sbagliata», la colpa è del programmatore. Quando c’è un problema che non si riesce a risolvere bisogna cercare di capire dove andare a lavorare.
Dati, variabili e costanti
Prima cosa a cui dobbiamo pensare quando progettiamo un algoritmo è su cosa deve elaborare. Dobbiamo immaginare tutto quello che succede nell’elaborare l’algoritmo.
I dati sono un primo elemento ma dovendo considerare tutto quello che succede durante l’algoritmo dobbiamo immaginare quali sono i dati che dobbiamo fornire in ingresso, quali sono i dati che vogliamo che il nostro algoritmo produca, ma anche passo dopo passo quali sono i dati necessari per dei calcoli intermedi, ad esempio, questo è molto importante nel momento in cui si calcola un algoritmo per due motivi:
- Non dobbiamo tenere in considerazione solo dimensione dati ingresso e in uscita ma dato che i dati staranno in memoria durante l’algoritmo dobbiamo arrivare a capire qual è la quantità di memoria che il nostro algoritmo ha bisogno.
- Dobbiamo capire tipologia di dati che utilizziamo perché dobbiamo poi capire come utilizzarli.
Prima cosa che dobbiamo capire sui dati è se sia una variabile o una costante. Se ragioniamo sul numero di mesi che ci sono in un anno, questa è un’informazione costante perché qualunque cosa succeda il numero di mesi rimane 12. Ci sono altri valori che non cambiano mai nel nostro algoritmo (pi greco).
Non cambiare mai è diverso da cambiare con una bassissima probabilità perché nell’altro caso c’è possibilità che il nostro dato assuma un valore diverso e quindi dobbiamo dare la possibilità all’algoritmo di mantenere il valore modificato.
Questo porta a idea di come i dati vengano rappresentati perché devono essere sempre rappresentati in modo univoco e comprensibile per il calcolatore, il calcolatore non deve avere ambiguità su come interpretare l’informazione. Se noi diciamo che un valore è costante non ci potremo fare operazioni di modifica, perché quello è un’operazione ambigua. Nel momento in cui l’informazione è variabile dobbiamo trovare un modo per rappresentarla in modo che il calcolatore la possa utilizzare. La variabile, quindi, rappresenta un dato che può variare il suo valore; mentre una costante è un valore che noi siamo sicuri, per come è costruito l’algoritmo (o per la definizione dei dati) questo non potrà mai cambiare. A seconda di come classifichiamo l’informazione utilizzeremo elementi diversi e da questo arriveranno rappresentazioni diverse.
Una volta definiti i dati su cui lavorare andremo a definire una serie di operazioni che prendono dei dati e producono un risultato. Combinando le operazioni creiamo le espressioni e utilizzando le espressioni riusciamo a fare le trasformazioni da ingresso e uscita. Tutte queste operazioni sono quelle che poi potremo usare nel nostro algoritmo. Proprietà soprattutto di atomicità va a ricordare che nel momento in cui definiamo queste operazioni ci rappresenta il set minimo di operazioni che possiamo utilizzare e poi ci dovremo ricondurre il nostro algoritmo a utilizzare solo ed esclusivamente queste operazioni, indivisibili e comprensibili dal calcolatore.
Quindi i dati d’ingresso li trasformiamo verso dati in uscita, ma gli algoritmi fanno delle scelte nel momento in cui dobbiamo prendere flussi di controllo diversi ed eseguire delle operazioni a seconda di una condizione piuttosto che un’altra (esempio calcolare valore assoluto di un numero, ci sono operazioni diverse a seconda del risultato di un’operazione). Flusso di controllo: specifica delle possibili successioni dei passi dell’algoritmo.
Mettendo insieme i dati, le operazioni e il flusso di controllo si ha la possibilità di eseguire qualsiasi tipo di algoritmo.
La variabile si può immaginare come un contenitore di informazioni. Parliamo di variabili quindi di elementi che possono cambiare il loro valore durante l’esecuzione, un valore costante non ha bisogno di essere salvato in memoria, non ha bisogno di un contenitore per rappresentare l’informazione perché nel nostro algoritmo lo possiamo rappresentare direttamente.
Andiamo ad utilizzare un contenitore d’informazioni in memoria solo nel momento in cui l’elemento è definito variabile, se la variabile cambia molto poco, raramente, è quasi costante nel tempo io avrò il mio contenitore di informazioni che per la maggior parte del tempo avrà all’interno uno stesso valore. Nel momento in cui vado a fare un’operazione e vado a cambiare quel valore, il mio contenitore di memoria dove ho assegnato la variabile conterrà il nuovo valore e se andrò ad utilizzarlo sarò sicuro che conterrà l’ultimo valore.
La variabile può e deve avere sempre un valore, vuol dire che non posso avere più valori associati alla stessa variabile, se devo avere più valori devo avere più variabili (es data composta da giorno mese e anno, non posso immaginarli con un’unica variabile ma tre contenitori diversi). Una variabile non è mai vuota (problema informatico) perché nel momento in cui dico che una determinata area di memoria rappresenta un valore, qualunque operazione io faccia su quel contenitore vado a prendere il valore che c’è dentro, la memoria non ha la possibilità di sapere.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Fondamenti di Informatica teoria - algebra di boole
-
Appunti di Fondamenti di Informatica teoria - von Neumann
-
Appunti Fondamenti di Informatica teoria - sistemi di operativi
-
Appunti Fondamenti di Informatica teoria - sistemi di numerazione