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


Informatica Ciro D’Addio, Dispense di Elementi di Informatica

elementi di informatica, digital humanist

Tipologia: Dispense

2022/2023

Caricato il 02/02/2023

Virginia.14
Virginia.14 🇮🇹

1 documento

1 / 22

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
Digital Humanist
L'informatica umanistica, o digital humanities o humanities computing, è un campo di studi che nasce
dall'integrazione di procedure computazionali e sistemi multimediali nelle discipline umanistiche, relativa
alla rappresentazione dei dati, alla formalizzazione delle fasi di ricerca e alle tecniche di diffusione dei
risultati.
Quali competenze deve possedere un umanista digitale? Un umanista digitale è anzitutto un umanista,
dotato però delle nozioni tecniche e metodologiche necessarie per pensare il proprio lavoro e il proprio
ruolo in modo assai diverso da quello tradizionale. Il compito forse più arduo per un umanista digitale è
imparare a pensare in un modo diverso da quello cui ci hanno abituati secoli di tradizione scritta; questo
non significa criticare questa tradizione, che è il fondamento stesso della disciplina, ma solo constatare che
nel produrre risorse digitali l’umanista deve, per certi aspetti, adottare abiti mentali differenti.
Ad esempio, uno dei temi che ricorrono più spesso a questo proposito è la necessità di separare i dati (il
“contenuto”) dalle loro potenzialmente infinite visualizzazioni (la “presentazione”), laddove l’abitudine di
pubblicare testi come risultato di un’attività scientifica ha sempre condotto a fondere questi due aspetti.
DIZIONARIO: Un dizionario è un libro che si articola in voci, ciascuna delle quali è un testo, che contiene
lemmi, parti del discorso, flessioni, traducenti, esempi, fraseologie, parole derivate o comparabili. Il testo
qui è l’unica modalità di presentazione di questi dati, anche se questi si potrebbero incasellare in schede da
riempire come moduli, piuttosto che essere calati in un’unica sequenza di parole che deve essere
interpretata dal lettore. Questo limite si ripropone anche quando il dizionario venga trasportato dalla carta
a un medium digitale: i primi dizionari digitali su web erano in fondo un testo codificato in HTML, il
linguaggio di marcatura delle pagine web.
Il miglior modo per “scrivere” un dizionario, è NON scriverlo: ovvero, non si tratta più di concepirlo come un
testo, ma come un organismo complesso e indipendente da una specifica modalità di presentazione. In
pratica, questo significa che gli autori del dizionario inseriranno dei dati in questo sistema, similmente a
quanto si fa nel popolare un qualsiasi database. Questa “liberazione dei dati” è un processo da tempo
auspicato e avviato per lo stesso futuro del web, nato come rete di (iper)testi.
Non è ovviamente possibile che ogni umanista sia un informatico esperto e nessuna impresa digitale oggi
può essere il prodotto di un singolo. Proprio nella prospettiva del lavoro di squadra, è però necessario che
l’umanista sia in grado di modellare i propri problemi in modi nuovi e adatti alla loro metamorfosi digitale,
in modo da poter dialogare in modo fruttuoso con gli specialisti di informatica, con una buona base
informativa sui metodi di trattamento dei dati e sulle caratteristiche essenziali, i vantaggi e gli svantaggi di
ciascuna tecnologia.
Il termine “Informatica”: Etimologia
Deriva dal francese informatique
• Coniato negli anni ‘60 da Philippe Dreyfus
• Ottenuto come contrazione dei termini “information” e “automatique”
• Usato per indicare la disciplina tecnico-scientifica che si occupa della progettazione e costruzione di
macchine in grado di trattare (o elaborare) in modo automatico l’informazione
L’informatica è una scienza che riguarda la rappresentazione e l’elaborazione dell’informazione; studia le
caratteristiche dell’informazione e i modi di usarla, immagazzinarla, trasportarla e manipolarla in modo
automatico.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Anteprima parziale del testo

Scarica Informatica Ciro D’Addio e più Dispense in PDF di Elementi di Informatica solo su Docsity!

INFORMATICA

Digital Humanist L'informatica umanistica, o digital humanities o humanities computing, è un campo di studi che nasce dall'integrazione di procedure computazionali e sistemi multimediali nelle discipline umanistiche, relativa alla rappresentazione dei dati, alla formalizzazione delle fasi di ricerca e alle tecniche di diffusione dei risultati. Quali competenze deve possedere un umanista digitale? Un umanista digitale è anzitutto un umanista, dotato però delle nozioni tecniche e metodologiche necessarie per pensare il proprio lavoro e il proprio ruolo in modo assai diverso da quello tradizionale. Il compito forse più arduo per un umanista digitale è imparare a pensare in un modo diverso da quello cui ci hanno abituati secoli di tradizione scritta; questo non significa criticare questa tradizione, che è il fondamento stesso della disciplina, ma solo constatare che nel produrre risorse digitali l’umanista deve, per certi aspetti, adottare abiti mentali differenti. Ad esempio, uno dei temi che ricorrono più spesso a questo proposito è la necessità di separare i dati (il “contenuto”) dalle loro potenzialmente infinite visualizzazioni (la “presentazione”), laddove l’abitudine di pubblicare testi come risultato di un’attività scientifica ha sempre condotto a fondere questi due aspetti. DIZIONARIO: Un dizionario è un libro che si articola in voci, ciascuna delle quali è un testo, che contiene lemmi, parti del discorso, flessioni, traducenti, esempi, fraseologie, parole derivate o comparabili. Il testo qui è l’unica modalità di presentazione di questi dati, anche se questi si potrebbero incasellare in schede da riempire come moduli, piuttosto che essere calati in un’unica sequenza di parole che deve essere interpretata dal lettore. Questo limite si ripropone anche quando il dizionario venga trasportato dalla carta a un medium digitale: i primi dizionari digitali su web erano in fondo un testo codificato in HTML, il linguaggio di marcatura delle pagine web. Il miglior modo per “scrivere” un dizionario, è NON scriverlo: ovvero, non si tratta più di concepirlo come un testo, ma come un organismo complesso e indipendente da una specifica modalità di presentazione. In pratica, questo significa che gli autori del dizionario inseriranno dei dati in questo sistema, similmente a quanto si fa nel popolare un qualsiasi database. Questa “liberazione dei dati” è un processo da tempo auspicato e avviato per lo stesso futuro del web, nato come rete di (iper)testi. Non è ovviamente possibile che ogni umanista sia un informatico esperto e nessuna impresa digitale oggi può essere il prodotto di un singolo. Proprio nella prospettiva del lavoro di squadra, è però necessario che l’umanista sia in grado di modellare i propri problemi in modi nuovi e adatti alla loro metamorfosi digitale, in modo da poter dialogare in modo fruttuoso con gli specialisti di informatica, con una buona base informativa sui metodi di trattamento dei dati e sulle caratteristiche essenziali, i vantaggi e gli svantaggi di ciascuna tecnologia. Il termine “Informatica”: Etimologia Deriva dal francese informatique

  • Coniato negli anni ‘60 da Philippe Dreyfus
  • Ottenuto come contrazione dei termini “information” e “automatique”
  • Usato per indicare la disciplina tecnico-scientifica che si occupa della progettazione e costruzione di macchine in grado di trattare (o elaborare) in modo automatico l’informazione L’informatica è una scienza che riguarda la rappresentazione e l’elaborazione dell’informazione; studia le caratteristiche dell’informazione e i modi di usarla, immagazzinarla, trasportarla e manipolarla in modo automatico.

Due aree principali:

  • I calcolatori elettronici e i sistemi che li utilizzano;
  • I metodi per la soluzione di problemi e la gestione delle informazioni. In alternativa al termine “informatica”, viene spesso utilizzato il termine “tecnologia dell’informazione” (ingl. Information Technology o IT). Negli ultimi decenni le capacità dei singoli calcolatori sono aumentate grazie alla loro interconnessione in rete. I computer sono diventati degli strumenti di comunicazione. La convergenza tra la tecnologia dell’informazione e le telecomunicazioni ha dato vita ad una disciplina che prende il nome di Information & Communication Technology (ICT). Il termine INFORMAZIONE, nel nostro linguaggio vuol significare mezzi d’informazione, società dell’informazione ecc; in ambito informatico il significato del termine “informazione” è messo spesso in relazione con quello di “dato” e di “conoscenza”. Dati: Insieme di simboli tracciati su un supporto fisico, che rappresentano una proprietà di un oggetto nel mondo reale, ma che non contengono alcun riferimento alla proprietà a cui si riferiscono; Informazioni : Dati messi in relazione con la proprietà a cui essi si riferiscono; Conoscenza : Regole che permettono di trarre vantaggio dalle informazioni. I dati rappresentano la materia prima del trattamento dell’informazione e si dividono in:
  • Dati semplici, come i numeri, i caratteri, etc.
  • Dati complessi, come i film, i suoni, le immagini, etc. La gestione di questo tipo di dati è resa possibile dall’incredibile potenza raggiunta dagli elaboratori nell’ultimo decennio. I simboli sono associabili ad un supporto fisico:
  • Disegni, caratteri, note, ecc.
  • Pareti rupestri, carta, legno, ecc. Nota importante: I simboli hanno una forma ben precisa che ci consente di distinguerli l’uno dall’altro. Ciascun simbolo deve essere univocamente identificabile. CODICI E CODIFICA
  • L’associazione tra un insieme di simboli e un insieme di significati si chiama CODIFICA. La codifica realizza una corrispondenza tra i simboli e il significato. In base a questa associazione, il simbolo porta l’informazione (anche se non è l’informazione in sé); ad esempio, il simbolo “3” è associato al numero tre •L’insieme dei simboli utilizzati viene detto alfabeto e la regola di associazione viene detta CODICE. Al concetto di “numero tre” possono corrispondere diverse rappresentazioni simboliche: “3”, “III”, “tre”, “three”, “trois”. È possibile passare da una codifica a un’altra, operazione che viene chiamata transcodifica. Gli Elaboratori (o Calcolatori) Elettronici Svolgono un lavoro che per l’uomo è naturale, ma
  • Lo fanno rapidamente

Trasferimento = BUS Obiettivo : permettere lo scambio di informazioni tra le varie componenti funzionali del calcolatore. Trasferimento dei dati e delle informazioni di controllo.

  • Due possibili soluzioni:
  1. Collegare ciascuna componente con ogni altra componente;
  2. Collegare tutte le componenti a un unico canale (bus);
  • L’utilizzo di un bus favorisce la modularità e l’espandibilità del calcolatore. Il bus di sistema assicura l’interconnessione tra gli elementi della macchina di Von Neumann. Tutti i trasferimenti avvengono attraverso il bus. Il bus mette in collegamento logico i due elementi coinvolti nel trasferimento, in funzione dell’operazione da eseguire. Le operazioni si succedono in modo sincrono, rispetto alla cadenza imposta da un orologio di sistema (clock). Il bus è fisicamente realizzato mediante un insieme di connettori elettrici. Es.: trasferire dati fra le unità funzionali.
  • L’unità che inizia il trasferimento (in genere la CPU) fornisce l’indirizzo, che individua univocamente il dato, sulle linee del bus indirizzi e configura le linee del bus di controllo, inviando un comando al dispositivo che contiene il dato (ad es. READ, alla memoria principale);
  • Il dato da trasferire è reso disponibile sul bus dati e viene ricopiato nel dispositivo destinatario. Memorizzazione Un’unità di memoria fornisce due sole operazioni:
  • Memorizzazione di un valore: operazione di scrittura
  • Accesso al valore memorizzato: operazione di lettura Le memorie sono dispositivi per “lo stoccaggio” delle informazioni. In ogni elaboratore vi sono generalmente tre tipi di memorie:
  • Registri: contengono informazioni necessarie all’elaborazione della singola istruzione
  • Memoria centrale : contiene dati e istruzioni attualmente elaborati dal processore
  • Memorie di massa : contengono dati e programmi che non sono oggetto di elaborazione immediata I parametri fondamentali che caratterizzano una memoria sono:
  • **_Modalità di accesso
  • Permanenza o volatilità dei dati
  • Capacità
  • Tempo di accesso_** Modalità di Accesso alle Memorie Accesso sequenziale : prima di leggere una cella è necessario leggere tutte quelle che la precedono; Accesso diretto : dato l’indirizzo di una cella, si può accedere ad essa in modo immediato;

Accesso misto : le celle sono organizzate in blocchi; ogni blocco è costituito da un certo numero di celle. Si ha accesso diretto ai blocchi e accesso sequenziale alle celle all’interno di un blocco. Permanenza dei dati In base alla capacità di memorizzare in maniera permanente i dati si distinguono due tipi di memoria:

  • memoria volatile: memorie che perdono le informazioni se non alimentate elettricamente (lo sono la maggior parte delle memorie elettroniche RAM);
  • memoria non volatile: memorie che mantengono le informazioni anche se non alimentate elettricamente (lo sono tutti gli altri tipi di memoria). Nonostante i loro difetti, le memorie volatili sono molto utilizzate, in quanto hanno tempi di accesso molto inferiori a quelli di altre memorie. Capacità di memoria La capacità della memoria è la quantità di informazioni (misurata in bit o in byte) che il dispositivo è in grado di memorizzare. Attualmente la capacità di memoria RAM dei personal computer sono misurate tramite multipli del byte, come il megabyte MB (milioni di byte), gigabyte GB (miliardi di byte) e terabyte TB. Tempo di accesso Indica la velocità necessaria per accedere ad una locazione di memoria (cella) durante un’operazione di lettura o scrittura di informazioni. Si esprime in nanosecondi, millisecondi. Il tempo di accesso è molto basso (velocità elevata di accesso) nel caso della memoria centrale. Il tempo di accesso è, invece, più alto (minore velocità di accesso) nelle memorie secondarie (hard disk, memory card, memorie flash, dvd-rom, cd-rom, ...). Memoria secondaria: dischi interni e dischi esterni La Memoria Centrale Centrale: indica l’importante ruolo che essa svolge nell’ambito dell’Architettura di Von Neumann. È la memoria collegata alla CPU tramite bus, che contiene dati e programmi attualmente utilizzati o in esecuzione. La CPU legge e scrive dati e istruzioni dalla/sulla memoria centrale. La memoria centrale consiste in un insieme di unità elementari di memorizzazione, dette locazioni o celle (o anche word). La tecnologia utilizzata per la memoria centrale è quella dei dispositivi a semiconduttori, che la fanno apparire come una matrice di bit (simboli 0 e 1). Ogni bit è presente come stato (alto o basso) di tensione. Le caratteristiche fondamentali della memoria centrale sono:
  • Accesso diretto alle informazioni;
  • Velocità elevata;
  • Volatilità: quando il computer viene spento, i dati ed i programmi presenti in memoria centrale vengono cancellati. Altri tipi di memorie sono dette persistenti (memorie di massa o secondarie): mantengono i dati anche senza l’alimentazione elettrica. È anche detta memoria ad accesso casuale o Random Access Memory (RAM), perché qualsiasi cella può essere letta/scritta in un tempo mediamente costante.

Linguaggio Alfabeto: Collezione di simboli grafici, aventi di solito un ordine ben preciso, che servono a rappresentare le parole di una lingua; Vocabolario (o lessico): Insieme delle parole ammissibili di una lingua; Grammatica: Insieme di regole utili alla corretta costruzione di frasi, sintagmi e parole ; Semantica: Studia il significato delle parole (semantica lessicale), degli insiemi delle parole, delle frasi (semantica frasale) e dei testi; La funzione dei linguaggi I linguaggi sono strumenti per:

  • Rappresentare le informazioni: Concetti, pensieri, emozioni, etc., vengono formalizzati attraverso i linguaggi per poter essere memorizzati, trasferiti ed elaborati
  • Memorizzare le informazioni: La scrittura
  • Trasferire le informazioni: La comunicazione
  • Elaborare le informazioni: Le deduzioni nella logica Problemi dei Linguaggi
  • Accordo sui simboli: A b c d e f g …
  • Accordo sul lessico Casa, gatto, automobile, vado, …
  • Accordo sulla grammatica
  • Accordo sulla semantica: La nonna chiude la porta (OK) La porta chiude la nonna (NO)
  • Accordo sulla codifica: Regole per trasformare simboli, parole e frasi di un linguaggio in una nuova rappresentazione, con possibilità di effettuare in maniera corretta anche l’operazione inversa “a” in codice Morse (Samuel Morse, pittore e storico inglese) è “. – ” “b” in codice Morse è “ –... ” I Linguaggi Naturali: Ambiguità Per comunicare tra loro gli uomini hanno sviluppato i linguaggi naturali Italiano, inglese, francese…Una caratteristica negativa di tali linguaggi è la loro inerente ambiguità. Una qualsiasi frase formulata è potenzialmente polisemica. Il significato che viene dato alla frase da chi riceve il messaggio può essere diverso da quello datogli dal mittente. Per comunicare con un elaboratore, l’ambiguità dei linguaggi naturali rappresenta un grosso problema. Risulta quindi necessaria la definizione di un Linguaggio più Formale, che permetta di:
  • Individuare un alfabeto, ovvero un elenco finito di simboli
  • Definire un insieme di regole sintattiche, che specificano come i simboli dell’alfabeto possono essere combinati tra loro per creare frasi ben formate all’interno del linguaggio stesso (grammatica)
  • Attribuire un significato non ambiguo alle frasi del linguaggio (semantica) Linguaggi per Usare e Programmare il Computer I Programmi (o software) risolvono problemi specifici con approccio basato sulle informazioni e vengono eseguiti dai computer. Rappresentazione dell’Informazione: Accordo sui Simboli
  • L’informazione è rappresentata dai dati, che a loro volta sono espressi in forma di simboli
  • La stessa informazione può essere codificata con simboli e modalità diverse
    • 1963 → simboli “0”, “1”, “2”, …
    • MCMLXIII → simboli della codifica romana
    • Millenovecentosessantatre → rappresentazione testuale Rappresentazione dell’Informazione nei Calcolatori Consideriamo un alfabeto ridotto, che contiene solo due simboli “0” e “1”. Un bit (contrazione di binary digit) è un simbolo scelto sull’alfabeto {0, 1}. Nei calcolatori ogni elemento (numeri, testo, audio, video, istruzioni, etc) viene rappresentato (codificato) esclusivamente con sequenze di bit. I dati e le istruzioni vengono codificati con sequenze di bit. Codifica Binaria Alfabeto binario: Usiamo solo due simboli 0, 1 (bit) Problema: Assegnare una sequenza di bit univoca a tutti gli oggetti in un insieme predefinito Esempio interruttore: Un interruttore ha due sole possibilità: Acceso (ON) Spento (OFF). L’informazione sullo stato dell’interruttore corrisponde alla scelta fra due sole alternative. 1 bit basta per rappresentare lo stato dell’interruttore Interruttore Acceso (ON) => 1 Interruttore Spento (OFF) => 0 Altro esempio: il semaforo. Il semaforo ha tre possibilità. È possibile utilizzare una sequenza di tre bit per rappresentare ciascuna alternativa. È possibile ottimizzare l’uso del numero di bit ed usare una sequenza di soli due bit per rappresentare ciascuna alternativa. Codifica Binaria Quanti oggetti posso rappresentare con k bit? k bit → 2 𝑘 oggetti Quanti bit mi servono per codificare N oggetti? 𝑙𝑜𝑔 2 𝑁 bit (𝑥 indica la parte intera superiore di 𝑥) Esempio Quanti bit servono per rappresentare 5 oggetti? 𝑙𝑜𝑔25 = 3 bit (NOTA: log2 5 = 2.3219) Codifica dei caratteri Problema: è possibile applicare queste idee alla rappresentazione di informazione più complessa, ad esempio di un testo? Un testo è rappresentato attraverso una successione di caratteri. Ogni carattere viene scelto all’interno di un insieme finito di simboli (alfabeto). Con 8 bit è possibile rappresentare la scelta fra 256 alternative diverse (28=256) Da 00000000… a 11111111 Passando per tutte le combinazioni intermedie (00000001, 00000010, …). Nel caso del testo, possiamo far corrispondere diverse combinazioni di 8 bit (otto cellette, ciascuna delle quali può contenere 0 o 1) a caratteri diversi. Ogni singolo carattere viene codificato con una combinazione di 8 bit.
  • 3 unità Da Binario a Decimale: Tecnica Moltiplica ciascun bit per 2k, dove k è il “peso” del bit Il peso è dato dalla posizione del bit, a partire da 0 sulla destra. Da Decimale a Binario: Tecnica Dividi per due e tieni traccia del resto (divisione euclidea o divisione con resto). Il primo resto è il bit in posizione 0 (LSB, least-significant bit). Il secondo resto è il bit in posizione 1 e così via… Come Istruire i Calcolatori a Risolvere Problemi Gli elaboratori sono strumenti per risolvere (o aiutare a risolvere) problemi basati su informazioni e dati. Ma come ciò avviene?
  1. Abbiamo bisogno di codificare opportunamente informazioni e dati
  2. Abbiamo bisogno di impartire le giuste istruzioni per risolvere correttamente i problemi Come Modellare un Problema Un qualsiasi problema, per poter essere risolto da parte di un calcolatore mediante le necessarie istruzioni, deve essere opportunamente «modellato». Deve essere reso in una forma che sia tale da poter essere compresa e gestita da parte di un calcolatore. La corretta modellazione di un problema potrebbe non essere immediata. Qualora la modellazione di un determinato problema portasse a risultati sbagliati, sarebbe necessario modificare il modello. Come Risolvere un Problema mediante un Calcolatore Risolvere un Problema:
  3. Scegliere un’astrazione definendo un insieme di dati rilevanti che caratterizzano la realtà
  4. Scegliere una rappresentazione dei dati
  5. Individuare un procedimento adeguato per la risoluzione del problema (Algoritmo e poi Programma)
  6. Scomporre eventualmente il procedimento in sotto-procedimenti Che significa Algoritmo? Etimologia: Il termine Algoritmo deriva dal matematico Arabo Muḥammad ibn Mūsā al-Khwārizmī (c. 780- 850), autore del testo Al-jabrw’al-muqabâla (da cui anche il termine Algebra). Per essere qualificata come un algoritmo, una sequenza di istruzioni deve avere le seguenti caratteristiche;
    • Ciascuna istruzione dovrebbe essere precisa e non ambigua;
    • Ciascuna istruzione dovrebbe essere tale da poter essere eseguita in un tempo finito;
    • Una o più istruzioni non dovrebbero essere ripetute all’infinito, assicurando quindi che l’algoritmo alla fine termini;
    • Dopo aver eseguito le istruzioni, cioè dopo che l’algoritmo è terminato, i risultati desiderati devono essere ottenuti. Algoritmi di tipo numerico furono studiati da matematici babilonesi e indiani più di 3000 anni fa. Algoritmi in uso fino a tempi recenti furono studiati dai matematici greci nel 500 a.C. Algoritmo di Euclide per il Massimo Comun Divisore, Algoritmi geometrici (calcolo di tangenti, sezioni di angoli, ecc.)

Gli Algoritmi Oggi Un algoritmo consente di realizzare un particolare trattamento dell’informazione o più in generale di risolvere uno specifico problema; calcolare la somma di due numeri; calcolare la lunghezza dell’ipotenusa di un triangolo rettangolo; risolvere un’equazione di secondo grado. L’esperienza quotidiana suggerisce infiniti esempi di algoritmi. Molte azioni che svolgiamo abitualmente possono essere modellate mediante algoritmi: preparazione del caffè, prelievo bancomat, preparazione di una ricetta, Indicazioni per un lavoro a maglia. Algoritmo: Definizioni Definizione 1: procedura di calcolo ben definita, che prende un insieme di valori come input e produce un insieme di valori come output; Definizione 2: sequenza di azioni elementari che consente di trasformare i dati iniziali nei risultati finali attraverso un numero finito di passi non ambigui. Esempio: Algoritmo per prendere l’Automobile Algoritmo:

  1. Aprire l’auto
  2. Aprire la portiera
  3. Sedersi al posto di guida
  4. Allacciare la cintura
  5. Schiacciare la frizione
  6. Avviare il motore
  7. Inserire la prima marcia
  8. Togliere il freno a mano
  9. Rilasciare “delicatamente” la frizione per partire Osservazione: i passi sono eseguiti in sequenza e l’ordine delle istruzioni è essenziale per la corretta risoluzione del problema. Algoritmi: Esecutore e Linguaggio Un algoritmo presuppone la presenza di qualcuno (o qualcosa) in grado di eseguirlo, chiamato esecutore. In informatica l’esecutore è il calcolatore (computer). L’algoritmo viene “letto” dall’esecutore; l’esecutore, partendo dai dati in input, esegue (in un ordine ben preciso) tutte le istruzioni dell’algoritmo stesso, ottenendo al termine della propria esecuzione i dati in output. Per essere eseguito, l’algoritmo deve essere formulato in un linguaggio comprensibile dall’esecutore. Un esecutore può anche eseguire un algoritmo formulato in un linguaggio che non conosce, a patto che l’algoritmo stesso sia preventivamente tradotto in un linguaggio che invece gli è noto. L’algoritmo deve: prevedere soltanto istruzioni che richiedono all’esecutore di effettuare operazioni elementari; operazioni che egli sa compiere senza bisogno di ulteriori specifiche; essere formulato in un linguaggio non ambiguo, in cui cioè ogni istruzione caratterizzi univocamente una delle operazioni che l’esecutore è in grado di compiere; specificare senza ambiguità l’ordine di esecuzione delle istruzioni, cui l’esecutore deve attenersi scrupolosamente.
  • Mettere la bustina di tè in una tazza
  • Mettere l’acqua nel bollitore
  • Accendere il bollitore
  • Aspettare l’ebollizione dell’acqua
  • Aggiungere l’acqua alla tazza
  • Rimuovere la bustina di tè con il cucchiaio/forchetta
  • Aggiungere latte e/o zucchero
  • Servire FINE ALGORITMO Diagrammi di Flusso Per realizzare un algoritmo è necessario:
  • Individuare i dati in ingresso ed in uscita
  • Individuare un procedimento adeguato
  • Scomporre il procedimento in una sequenza di azioni elementari e non ambigue Per meglio affrontare l’ultimo punto si fa spesso ricorso ai diagrammi di flusso (o flow-chart): Strumenti grafici per rappresentare il flusso logico di operazioni che portano alla risoluzione di un problema; Costituiscono un linguaggio molto utile per descrivere gli algoritmi. Il flusso di esecuzione può essere rappresentato graficamente con un diagramma di flusso; si sviluppa graficamente su due dimensioni; si basa su pochi simboli; è un linguaggio universale; elimina le ambiguità. Un diagramma di flusso è composto da:
  • Blocchi elementari: descrivono azioni e decisioni
  • Archi orientati: collegano i vari blocchi e descrivono la sequenza di svolgimento delle azioni Un diagramma di flusso fornisce quindi una rappresentazione grafica di un algoritmo. Usa simboli (poligoni di diversa forma) che hanno un significato standard per denotare differenti tipi di istruzioni. Le istruzioni sono scritte all'interno dei poligoni; i poligoni sono connessi mediante frecce, per indicare l'esatta sequenza in cui le istruzioni devono essere eseguite. Regole dei Diagrammi di Flusso
  • Rappresentare innanzitutto il funzionamento principale dell’algoritmo e solo dopo aggiungere i particolari
  • Mantenere un livello uniforme di dettaglio per un dato diagramma di flusso
  • Non rappresentare ogni dettaglio di un programma: un lettore che è interessato a maggiori dettagli può far riferimento al programma stesso
  • Le istruzioni usate all’interno dei diagrammi di flusso dovrebbero essere di uso comune e facili da capire Essere coerenti nell'uso di nomi e le variabili nel diagramma di flusso. Durante la costruzione di diagrammi di flusso è buona norma quella di procedere da sinistra a destra e dall’alto verso il basso. Mantenere il diagramma di flusso il più semplice possibile: l’incrocio di linee di flusso dovrebbe essere evitato per quanto possibile. Se sono necessarie più pagine per rappresentare un singolo diagramma di flusso, è consigliabile interrompere tale diagramma in un punto di input o output. Devono essere utilizzati connettori correttamente etichettati per collegare porzioni di uno stesso diagramma di flusso appartenenti a pagine diverse.

Diagrammi di Flusso Blocchi Elementari : I blocchi elementari sono:

  • Blocco di Inizio e Fine
  • Blocco di Connessione
  • Blocco di Azione Generica e Azione di I/O
  • Blocco di Decisione Binaria (detta anche Condizionale oppure A Due Vie) Blocchi di Inizio e Fine: Un algoritmo (e di conseguenza una sua rappresentazione grafica) deve avere un inizio ed una fine. Tra l’inizio e la fine ci deve sempre essere almeno un’istruzione. Blocco di Connessione: La risoluzione di un problema consiste nell’esecuzione ordinata di una sequenza di operazioni. L’ordine nell’esecuzione delle istruzioni è fondamentale. Nei flow-chart è garantito dall’orientamento delle frecce che collegano i blocchi. Blocco di Decisione Binaria (o Condizionale): Possono essere presenti istruzioni condizionali, la cui esecuzione dipende cioè da scelte effettuate in base ai dati. Concettualmente, possiamo immaginare che il flusso di esecuzione si ramifichi. In base ad una condizione viene deciso se eseguire un’operazione oppure un’altra. Pseudocodice: Vantaggi: Immediato Svantaggi: Meno astratto, Interpretazione più complicata, Ognuno ha il proprio modo di scrivere uno pseudocodice. Diagrammi di flusso Vantaggi: Più intuitivi perché grafici; Più astratti Svantaggi: Richiedono apprendimento della funzione dei vari tipi di blocco; La loro creazione e modifica richiede tempo; Non ci sono standard che indicano la quantità di dettagli che dovrebbe essere incluso in un diagramma di flusso. Strutture di Controllo (Logiche) Un qualsiasi algoritmo (anche un qualsiasi programma) può essere espresso usando solo le seguenti tre strutture logiche di base:
  1. Sequenza logica
  2. Selezione logica (o alternativa)
  3. Iterazione logica (o ripetizione) Esempio: Algoritmo per calcolare il massimo tra 2 numeri x e y Esercizio: Algoritmo rappresentato mediante diagramma di flusso, per determinare il massimo tra 2 numeri, presi in input: 𝒙 e 𝒚 (con x  y) Input: 𝑥 e 𝑦 Output: Scrivere il max fra 𝑥 e 𝑦
  4. Leggi il valore di x dall’esterno
  5. Leggi il valore di y dall’esterno

Componi il numero SE qualcuno risponde ALLORA Conduci la conversazione ALTRIMENTI Deponi il ricevitore e Ripeti l’intero procedimento, a partire dal punto 1. Un algoritmo può essere visto come un testo in grado di descrivere un insieme di sequenze di esecuzione. L’algoritmo per effettuare una telefonata potrebbe avere un processo ciclico che non termina mai. L’interlocutore non risponde mai al telefono. Prodotto di due Numeri mediante Addizioni Successive 7 * 3 = 21 7 è detto moltiplicando 3 è detto moltiplicatore Utilizzando il metodo delle Addizioni Successive, la moltiplicazione può essere espressa come 7 + 7 + 7 = 21 L’algoritmo potrebbe essere costituito semplicemente dal seguente testo “Si sommi il moltiplicando a sé stesso un numero di volte uguale al valore del moltiplicatore”. Ad esempio potremmo scrivere

  1. Si sommi il moltiplicando a sé stesso, e si decrementi di uno il valore del moltiplicatore
  2. Si sommi ancora il moltiplicando al valore ottenuto dalla precedente somma e si decrementi di nuovo il valore ottenuto dalla precedente sottrazione
  3. Si ripeta il procedimento fino a che, per decrementi successivi, il moltiplicatore non raggiunga il valore zero Osservazione: per evitare ambiguità e specificare di volta in volta di quale valore si sta parlando, si è stati costretti ad usare le espressioni: “valore ottenuto dalla precedente somma” “valore ottenuto dalla precedente sottrazione” Per distinguere tali valori si ricorre a simboli o identificatori (detti variabili) per riferirsi senza ambiguità, di volta in volta, al valore desiderato. Prodotto di due Numeri mediante Addizioni Successive Algoritmo
  4. Sia M il valore del moltiplicando, N il valore del moltiplicatore ed M1 il risultato (inizialmente uguale a zero)
  5. Si ripetano le seguenti operazioni fino a che il valore di N non diventi uguale a 0. Si sommi il valore di M al valore di M1 e si chiami il risultato ancora M1. Si sottragga 1 dal valore di N, e si chiami il risultato ancora N
  6. Alla fine il valore di M1 è il risultato cercato I simboli M, N e M1 sono detti identificatori di variabili. M1 è detto accumulatore di risultato.

I Programmi Negli ultimi anni l’Information & Communication Technology (ICT) è diventato un elemento strategico per il business, oltre che uno strumento essenziale in tutte le attività lavorative e sociali. Ha acquisito un valore irrinunciabile per tutte le istituzioni pubbliche e private, per le imprese, ma soprattutto per tutti noi. Il programma rappresenta l’elemento di base per il mondo dell’ICT. Fanno ormai parte di ogni nostra attività: Sistemi Operativi, Videogiochi, ATM, semafori, il motore di ricerca Google, sistemi per il supporto del trasporto Virus, Malware. Differiscono sotto vari aspetti: obiettivi, funzionalità, algoritmi, risorse ecc. Perché imparare a programmare? Automatizzare azioni e processi, Risparmiare tempo, Risparmiare risorse, Imparare un nuovo modo di pensare (Computational Thinking). Utilizzo dell'informatica e della computazione per risolvere problemi. Usare l’informatica in aree a cui le persone non hanno ancora pensato. Programmare richiede spesso di far fronte a nuove sfide, quindi un programmatore inconsciamente acquisirà capacità di problem solving. Questa abilità non è solo utile nella programmazione, ma è anche essenziale nella vita reale. Aggiungere una nuova lingua (linguaggio) è un’importante abilità per le nostre competenze. Imparare un nuovo linguaggio permette di usare nuove forme espressive. Imparare un nuovo linguaggio permette di usare nuove forme espressive, creare oggetti che in realtà sembrano non tangibili, ma che in realtà lo sono; lo sono perché in molti casi hanno cambiato il nostro modo di vivere, ma anche per il loro impatto economico. Utilizzando idee creative e competenze di programmazione è possibile creare tecnologie rivoluzionarie stando comodamente seduti al proprio computer. La programmazione consente alle nostre idee di prendere forma e materializzarsi. Di solito il tutto nasce dalla necessità di risolvere problemi concreti. Il CERN (Conseil européen pour la recherche nucléaire), il più grande laboratorio al mondo di fisica delle particelle, aveva necessità di strumenti software (programmi) che permettessero la diffusione di informazioni fra i suoi diversi centri di ricerca. Per risolvere questo problema, Sir Timothy John Berners-Lee sviluppò i programmi che rappresentano la base concettuale per il World Wide Web (WWW). Durante i suoi anni universitari Mark Zuckerberg non riusciva a trovare un modo efficace per raccogliere informazioni sugli altri studenti della sua università (Harvard). Per risolvere questo problema ha creato Facebook. Originariamente progettato per gli studenti dell’Università di Harvard, fu presto aperto anche agli studenti di altre università e scuole. “Facebook” prende spunto da un elenco con nome e fotografia degli studenti, che alcune università statunitensi distribuiscono all'inizio dell'anno accademico per aiutare gli iscritti a socializzare tra loro. Fino al febbraio 2005 non era possibile condividere e rendere pubblici sulla rete Internet i propri video. Per risolvere questo problema, 3 ragazzi che lavoravano a Paypal (Chad Hurley, Steve Chen e Jawed Karim) crearono YouTube. Larry Page e Sergey Brin immaginarono un luogo che permettesse loro di accedere, in maniera semplice e rapida, a tutte le informazioni presenti sulla rete Internet. Per fare questo hanno creato Google , un potente motore di ricerca che viene utilizzato da diversi miliardi di persone in tutto il mondo. Cos’è un Programma? Definizione: Realizzazione/implementazione di un algoritmo espressa in un linguaggio di programmazione specifico. Problema - Modellazione del Problema - Algoritmo – Programma Risolvere problemi complessi mediante azioni elementari. Le istruzioni corrispondono ad azioni elementari: Somma, differenza, prodotto, divisione (e poco più). Istruzioni e dati sono numeri binari.

comportamento delle macchine. Quanti sono i linguaggi di programmazione presenti al mondo? Più di

  1. Ogni linguaggio di programmazione ha avuto origine da motivazioni specifiche. Ogni linguaggio di programmazione dispone di un insieme di “parole chiave”, le KEYWORDS. È caratterizzato da due componenti, complementari l’una con l’altra: Sintassi: insieme delle regole che specificano come comporre istruzioni ben formate; Semantica: specifica il significato di ogni istruzione ben formata. Deve essere definita la successione delle operazioni che vengono compiute quando l’istruzione viene eseguita. Linguaggi di Programmazione: Classificazione
  • Linguaggi di alto livello (vicini all’utente)
  • V generazione: linguaggi di descrizione dei problemi orientati alla risoluzione automatica
  • IV generazione: linguaggi per specifici ambiti applicativi (ad es. MATLAB, Markup Languages)
  • III generazione: linguaggi imperativi e procedurali di uso generale • Linguaggi di basso livello (vicini all’hardware)
  • II generazione: linguaggi assemblativi (uso di codici mnemonici per le istruzioni)
  • I generazione: linguaggi macchina (sequenze di bit) Linguaggi di Programmazione di Prima Generazione Gli elaboratori comprendono in maniera diretta solo istruzioni in binario. Ciascun elaboratore ha il proprio set di istruzioni (32bit/64bit). I primi programmi erano fortemente dipendenti dalla macchina poiché erano scritti in linguaggio macchina (o codice macchina). Linguaggio Macchina Il linguaggio macchina è direttamente eseguibile dall’elaboratore senza nessuna traduzione. Istruzioni ed operandi relativi al programma in esecuzione sono caricati in memoria e quindi sono memorizzati in forma binaria. Vincolo: conoscenza dei metodi di rappresentazione delle informazioni utilizzati. Tipica Istruzione in Linguaggio Macchina OPCODE: indica al computer quale operazione effettuare (quale istruzione eseguire), tra quelle appartenenti al proprio set di istruzioni. OPERAND: indica l’indirizzo dei dati su cui sarà effettuata l’operazione. Linguaggio Macchina Pro e Contro Pro: Eseguito in maniera molto efficiente Contro: Difficile da programmare per gli «umani», Non portabile (impossibilità di eseguirlo su macchine con architetture diverse), Soggetto ad errori, Difficile da modificare. Ancora molto utilizzato per la programmazione di funzioni a basso livello Driver, interfacce verso firmware e hardware, ecc.

Linguaggi di Programmazione di Seconda Generazione Un linguaggio assembly (o assemblativo) utilizza codici mnemonici per rappresentare le istruzioni. Il codice può essere letto e scritto da programmatori umani. Ma è ancora fortemente dipendente dalla macchina. Per essere eseguito da un elaboratore, un codice assembly deve essere convertito (da un assemblatore), in una forma comprensibile dalla macchina mediante un processo chiamato assemblaggio. Linguaggio Assembly: Caratteristiche Principali Il linguaggio assembly supera le limitazioni del linguaggio macchina. Per rappresentare le istruzioni usa codici mnemonici alfanumerici invece che codici numerici. Ad es., usando ADD invece di 1110 (binario) o 14 (decimale) per rappresentare l'istruzione somma. Permette di rappresentare le locazioni di memoria sotto forma di indirizzi alfanumerici. Ad es., rappresentando le locazioni di memoria 1000, 1001 e 1002 rispettivamente come FRST, SCND ed ANSR. Vantaggi del Linguaggio Assembly rispetto al Linguaggio Macchina ❑ Più facile da capire ed utilizzare ❑ Più facile rilevare e correggere gli errori ❑ Più facile da modificare ❑ Non bisogna preoccuparsi degli indirizzi ❑ Efficiente quanto il linguaggio macchina Linguaggio Assembly Pro e Contro Pro: Adatti ad essere usati in elaborazioni estremamente intensive: Giochi, video editing, manipolazione grafica, rendering, etc. Contro: Dipendente dalla macchina. Tipicamente è necessario conoscere le caratteristiche della macchina (registri, dimensione dei dati, set di istruzioni, ecc.) su cui deve essere eseguito il codice. Anche semplici algoritmi richiedono molte istruzioni. Programmare in questo linguaggio risulta essere abbastanza complesso. Linguaggi di Programmazione di Terza Generazione I linguaggi di programmazione di alto livello usano parole English-like (Esempi: if, for, while, …), notazione matematica e punteggiatura per scrivere programmi.

  • Sono più vicini ai linguaggi umani
  • Il programmatore può astrarre dai dettagli legati all’architettura ed esprimere i propri algoritmi in modo semplice
  • Le istruzioni esprimono una serie di azioni. Linguaggi di Programmazione di Alto Livello Le macchine comprendono ed eseguono soltanto codici macchina. Il programma prima di essere eseguito deve essere tradotto in linguaggio macchina: Traduttore. La traduzione viene effettuata da un compilatore, un interprete, o una combinazione di entrambi.