










































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
Riassunto delle lezioni tenute dal professore; appunti comprendenti: foto, definizioni, elenchi puntati. Schematico e sintetico. Contiene tutte e 9 le lezioni del corso di Informatica di base del 1° anno di Lettere moderne.
Tipologia: Appunti
1 / 50
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!











































“macchina per l'elaborazione di dati rappresentati da caratteri alfanumerici variamente codificati, che vengono sottoposti a procedimenti aritmetici e logici, memorizzati in archivi e resi reperibili e trasmissibili” (definizione originale) (in uso dal XVII°) = “qualcuno che esegue calcoli matematici” (definizione generale) = “qualsiasi agente (entità adeguatamente istruita) in grado di fare calcoli e produrre una risposta (output) a partire da un’informazione iniziale (input)” (in italiano) = calcolatore
Punto fisso da cui i moderni computer sono stati creati -un computer può essere sia una macchina, sia una persona, PERO’: ->programmiamo un computer (elettronico) ->parliamo con una persona (computer umano) per istruirla all’esecuzione di specifiche azioni attraverso l’uso di un particolare linguaggio (In questo caso naturale), usato come canale di comunicazione SCRIVERE UN PROGRAMMA = comunicare ad un computer elettronico utilizzando un linguaggio (in questo caso formale) che sia l’istruttore umano sia il computer stesso possano comprendere Accordarsi sul linguaggio da usare tra istruttore e computer (umano / macchina) Pensare una sequenza di istruzioni da comunicare (se seguite sistematicamente danno un risultato atteso per risolvere un certo problema) Scopo = trovare un pattern (schema ricorrente) per risolvere una situazione attingendo da un insieme di situazioni omogenee ->si potrebbe riusare la stessa strategia (se funzionante) per raggiungere il nostro obiettivo PENSIERO COMPUTAZIONALE
*marcatura di un testo riconoscimento dei ruoli strutturali e semantici delle varie parti (sezioni, capoversi, dialoghi, ecc.) attività sistematica e inconsapevole ogni qual volta si prende un documento da analizzare o da leggere *ogni parte di un testo è organizzata in modo molto preciso (capoversi capitoli libro) (dialogo personaggio capoversi capitoli libro) (paragraph chapter book) *marcatura = racchiudere una parte del testo in una scatola etichettata (esplicitata con opportuni linguaggi di markup) albero = struttura dati che descrive in modo astratto queste organizzazioni gerarchiche insieme di nodi collegati tra loro da una relazione gerarchica genitore-figlio nodi disposti dall’alto al basso bordo in grassetto -> nodo radice (root node) = unico senza genitore bordo tratteggiato -> nodi foglia dell’albero (leaf nodes) = nodi senza figli Rispetto ad un nodo: nodo genitore (parent node) = quello direttamente connesso quando ci si muove verso il nodo radice nodo figlio (child node) = uno di quelli direttamente connessi quando ci si muove lontano dal nodo radice nodo fratello (sibling node) = uno di quelli che condivide lo stesso nodo genitore nodo antenato (ancestor node) = uno di quelli raggiungibili seguendo ripetutamente le relazioni genitore-figlio andando verso il nodo radice nodo discendente (descendant node) = uno di quelli raggiungibili seguendo ripetutamente le relazioni genitore-figlio spostandosi lontano dal nodo radice le strutture ad albero possono rappresentare informazioni molto diverse GRAFO l’origine deriva da un piccolo gioco (ai tempi, un vero e proprio problema matematico) che riguarda sette ponti di una specifica città, Königsberg ->“è possibile fare una passeggiata in città attraversando ogni ponte una ed una sola volta?” ->->Eulero nel 1736 lo dimostra negativamente, con una dimostrazione matematica formale Eulero:
ha descritto, in modo astratto, le quattro terre che formavano Königsberg come nodi di una rete collegati da archi ogni arco tra due nodi rappresentava un ponte tra due lembi di terra ha dimostrato che non esiste alcuna soluzione al problema dei sette ponti di Königsberg ha usato una RAPPRESENTAZIONE ASTRATTA = grafo ogni nodo (eccetto il nodo di partenza e quello di arrivo) dovrebbe avere un numero pari di archi per essere raggiunti e poi abbandonati (implicazione pratica derivata dagli spostamenti che una persona deve fare per arrivare in un lembo di terra e poi passare oltre) (ogni volta che si entra in un nodo bisogna percorrere un arco, e un altro arco è necessario per uscire da quel nodo) per poter essere attraversati, ogni nodo deve avere un numero pari di archi, per essere transitato una o più volte MA i nodi di Konigsberg hanno un numero dispari di archi (contraddizione del requisito) il problema dei sette ponti non può essere risolto rappresentazione astratta 1 delle principali strutture dati in informatica e del pensiero computazionale usati per descrivere, in termini astratti, situazioni del mondo reale tragitti tra città / relazioni tra persone nei social network / organizzazione dei collegamenti ipertestuali tra pagine / relazioni concettuali nelle basi di dati o nei knowledge graph usati per esempio da Google Amazon e Facebook per i loro servizi struttura dati interamente derivata dallo strumento matematico inventato da Eulero distinguibili in due macro-categorie: grafi non orientati (come quello di Eulero) -un arco può essere attraversato in una direzione o nell’altra a piacere grafi orientati -ogni arco specifica esplicitamente la direzione di percorrenza INFORMATICA 2 USI POSSIBILI DELLA MACCHINA ANALITICA -Ada Lovelace o figlia di Lord Byron (non sopportava il suo interesse scientifico) o matematica di formazione o lavorò sulla Macchina Analitica di Babbage o la madre supportò il suo interesse per logica e nella matematica o 1833 = partecipò ad una festa organizzata da Charles Babbage per presentare la Macchina Differenziale o colpita dall’invenzione di Babbage + iniziò 27 anni di corrispondenza epistolare con lui o traduttrice in inglese del primissimo articolo sulla Macchina Analitica (annotazioni personali e riflessioni) o descrive come usare la Macchina Analitica per calcolare i numeri di Bernoulli primo programma (nonché il primo algoritmo) per un computer digitale mai scritto, e fu creato da Ada senza avere neppure a disposizione la macchina reale, visto che la Macchina Analitica era soltanto una macchina teorica che Babbage non costruì mai o parlò dell’Informatica 100 anni prima della sua introduzione formale o spesso riconosciuta come il primo programmatore della storia COS’E’ UN ALGORITMO? -Gli algoritmi accompagnano le nostre attività della vita quotidiana
-algoritmo = prendere in input tre stringhe (2 parole e 1 riferimento bibliografico di un articolo pubblicato) e restituire 2 se entrambe le parole sono contenute nel riferimento bibliografico, 1 se solo una delle parole è contenuta nel riferimento bibliografico, o 0 altrimenti UNA VERSIONE INCOMPLETA -con i diagrammi di flusso qualunque algoritmo è definito usando 2 oggetti terminali (inizio e fine dell’algoritmo) -terminale di inizio -> ha una freccia che parte da esso e va verso l’istruzione successiva (la prima dell’algoritmo) -terminale di fine -> può essere raggiunto da differenti punti dell’algoritmo (collegato da almeno una freccia) -1° versione incompleta dell’algoritmo semplifica un poco le istruzioni in linguaggio naturale precedentemente introdotte mostra come possiamo usare alcuni iniziali oggetti per creare un algoritmo -la versione semplificata = prende in input solo 2 stringhe, 1 parola e 1 riferimento bibliografico, e restituisce 1 se la parola è contenuta nel riferimento bibliografico, 0 altrimenti -questa versione parziale usa già molti degli oggetti grafici propri ai diagrammi di flusso: terminali di inizio e fine 3 oggetti di input / output (per acquisire i valori specificati come input e per restituire 0 o 1 dipendentemente da questo input)
-la decisione su quale output restituire è stata codificata grazie all’oggetto decisionale dei diagrammi di flusso, in cui l’input è analizzato e, a seconda della situazione, uno specifico ramo del flusso dell’algoritmo viene percorso L’ALGORITMO COMPLETO -implementazione dell’algoritmo completo attraverso lo sviluppo di un diagramma di flusso ->usati tutti gli oggetti grafici ->diagramma di flusso presentato = soltanto un possibile modo per implementare l’algoritmo originale. -è possibile creare anche un diagramma di flusso diverso che risolve il problema descritto dall’algoritmo in linguaggio naturale correttamente utilizzato il primo oggetto di processo in cui il risultato che verrà restituito alla fine dell’esecuzione dell’algoritmo viene inizializzato a 0, associandolo implicitamente a una variabile (“result value”) risultato = quello che l’algoritmo deve ritornare se entrambe le parole in input non sono contenute nel riferimento bibliografico specificato oggetto di processo = seguito da due oggetti decisionali messi in sequenza, che controllano le due condizioni (se la prima parola è contenuta nel riferimento bibliografico, e se la seconda parola è contenuta nello stesso riferimento) se le 2 condizioni sono vere, eseguono un incremento di 1 al risultato finale da restituire (usando altri oggetti di processo) risultato finale = restituito da un unico oggetto di output, che conclude l’esecuzione dell’algoritmo (qualunque sia il valore associatogli) CI SONO LIMITI ALLA COMPUTAZIONE? possiamo usare gli algoritmi per computare qualsiasi cosa? esiste un limite a quello che possiamo computare? è possibile definire un problema computazionale (problema che può essere risolto algoritmicamente da un computer) che non può essere risolto da nessun algoritmo?
->biologia (studio che identifica i processi spontanei di creazione di pattern in natura) 1936 = sviluppò la sua macchina per cercare di rispondere al problema della terminazione di Hilbert macchina solo teorica (non l’aveva costruita fisicamente) recentemente molte persone hanno provato a costruire prototipi fisici dell’idea di Turing in grado di simulare l’esecuzione di qualunque algoritmo realmente implementabile composta da un nastro di memoria infinito composto da celle ->ogni cella può contenere un simbolo (o 0 o 1, dove 0 è usato come default per inizializzare le celle di tutto il nastro) che può essere letto e scritto dalla testina della macchina le operazioni che può fare sono definite in una tabella (finita) di istruzioni ->ogni istruzione dice cosa fare (scrivere un nuovo simbolo / muovere la testina a sinistra o a destra / spostarsi in un nuovo stato) in base allo stato in cui la macchina si trova e al simbolo presente nella cella sotto la testina forniti anche stato iniziale e zero o più stati finali (per sapere dove iniziare e finire il processo) usata da Turing per mostrare una soluzione per il problema della terminazione -dimostrazione per assurdo supponiamo sia possibile sviluppare l’algoritmo “termina?” o si prende in input un certo algoritmo o restituisce “vero” nel caso in cui l’algoritmo specificato come input termina o restituisce “falso” in caso contrario o algoritmo ipotetico (stiamo supponendo che possiamo svilupparlo in qualche modo, senza mostrare come farlo davvero) -prendiamo in input un nuovo algoritmo ed eseguiamo su di esso l’algoritmo “termina?” ->salviamo il risultato nella variabile “ha_terminato” si arriva sempre ad una contraddizione: se “ha_terminato” è vero continuo ad eseguire istruzioni all’infinito se “ha_terminato” è falso (l’algoritmo in input non termina) restituisco 0 e l’algoritmo termina -se prendo come algoritmo in input il 2° algoritmo arrivo ad un paradosso l’algoritmo “termina?” afferma che un altro algoritmo non termina e viceversa -siamo in grado di implementare ogni passo di questo nuovo algoritmo
qualunque sia il comportamento dell’algoritmo *, la sua esecuzione, passando se stesso come input, genera sempre una contraddizione ->unica spiegazione possibile = l’algoritmo ipotetico “termina?” che usiamo per decidere se un algoritmo termina o meno non può essere sviluppato -è dimostrato per assurdo che l’algoritmo che verifica se un altro termina non può esistere (risposta al problema della terminazione) -la macchina di Turing e le analisi su di essa hanno imposto dei limiti a quello che possiamo calcolare + hanno permesso di dimostrare che determinati problemi computazionali (terminazione) non possono essere risolti da nessun approccio algoritmico INFORMATICA 3 CHE COS’E’ UN LINGUAGGIO?
*lettere dell’alfabeto greco indicano una qualsiasi possibile combinazione di simboli terminali e non terminali (incluso il simbolo terminale vuoto, solitamente rappresentato con ε) I LINGUAGGI DI PROGRAMMAZIONE
*CPU = cuore di funzionamento di un computer elettronico, componente che esegue esplicitamente le istruzioni specificate in un qualsiasi programma in esecuzione
2. LINGUAGGI DI PROGRAMMAZIONE A BASSO LIVELLO -forniscono un livello di astrazione sopra il linguaggio macchina -permettono di scrivere programmi in modo che siano un pochino più intellegibili dagli umani -linguaggio di questo tipo più famoso = l’Assembly (introduce simboli più comprensibili + una linea di codice in Assembly rappresenta una specifica istruzione in linguaggio macchina) la funzione per calcolare l’n-esimo numero di Fibonacci introdotta precedentemente può essere definita in Assembly come segue: 3. LINGUAGGI DI PROGRAMMAZIONE AD ALTO LIVELLO -linguaggi con forte livello di astrazione dal linguaggio macchina -possono usare parole proprie del linguaggio naturale per definire costrutti specifici, così da essere di più facile comprensione per un umano -più astrazione da un linguaggio di programmazione a basso livello è fornita, più comprensibile è il linguaggio -dimostrazione di come usare il linguaggio di programmazione Python per implementare la stessa funzione introdotta in precedenza: -Grace Brewster Murray Hopper
man a mano che si va avanti, il numero di azioni che si devono far compiere al coniglio diventa più elevato ci sono costrutti addizionali, proposti man a mano che i livelli salgono di difficoltà, per semplificare la specificazione di queste lunghe sequenze di azioni un nuovo oggetto grafico (o costrutto) potrebbe essere quello che permette di raggruppare sequenze ripetitive di azioni e di eseguirle un numero definito di volte, ovviando al problema di indicarle tutte per esteso (diagramma di flusso: ripetizione resa con un oggetto grafico decisionale che controlla se la sequenza di azioni “fai due passi avanti” e “gira a destra” è stata eseguita il numero necessario di volte (4) per risolvere il problema computazionale, e così concludere l’algoritmo) -esistono anche altri linguaggi di programmazione visuale, più general-purpose (permettono di sviluppare algoritmi per risolvere problemi computazionali di vario genere) Blockly , creato da Google dispone di diversi costrutti propri dei linguaggi di programmazione tradizionali propone i costrutti sotto forma di blocchetti che si possono incastrare uno sull’altro o uno dentro l’altro per definire le sequenze di operazioni di un algoritmo Blocky ha un algoritmo che costruisce la sequenza di azioni precedenti (coniglio), inserendole dentro una lista nell’ordine in cui vanno fatte eseguire al coniglio ->inizializzazione di una variabile di istruzioni con una lista vuota ->nelle operazioni successive la lista vuota viene riempita con le operazioni che devono essere eseguite dal coniglio ->ogni nuova istruzione viene inserita alla fine della lista per mantenere il giusto ordine delle azioni della sequenza Si possono utilizzare specifici costrutti di Blocky per permettere ripetizioni sistematiche di un gruppo di istruzioni
(utilizzo del costrutto repeat while
-1960 = Ted Nelson inizia a lavorare ad un nuovo progetto = XANADU obiettivo = creare una rete di computer che potesse essere depositaria dell’intera conoscenza umana e che potesse essere estesa mediante dei collegamenti ipertestuali bidirezionali che permettessero di collegare tra loro idee contenute in diversi documenti riprese il concetto di percorsi associativi di Vannevar Bush introdusse una serie di concetti chiave: trasclusione e intertwingularity (concetto di processo associativo della conoscenza tipico degli umani) -nello stesso periodo, Douglas Engelbart aveva iniziato l’implementazione di un sistema rivoluzionario per l’epoca (creazione di ipertesti su un computer) = On-Line System (NLS) impatto dirompente sullo stato corrente e futuro delle tecnologie informatiche disponibili all’epoca il suo sviluppo aveva portato a innovazioni software (applicazioni e programmi a disposizione di un computer) e hardware (parte fisica e tangibile di un computer) prima di NLS non esistevano le finestre per la visualizzazione dei contenuti, l’ipertesto, un sistema di videoconferenza, il mouse ecc. (fondamenti per lo sviluppo dei moderni computer e sistemi operativi) L’INVENZIONE DEL WORLD WIDE WEB -passarono anni prima di un’implementazione su scala mondiale di un ipertesto, il World Wide Web idea di un giovane scienziato del CERN di Ginevra nel 1989, Tim Berners-Lee progetto inizialmente respinto dai suoi superiori (“vago, ma eccitante”) progetto ritrovato più tardi da Berners-Lee su una copia a disposizione del suo capo di allora poi accettato come progetto collaterale per testare le potenzialità di un nuovo computer (il NeXT, realizzato dall’omonima azienda di proprietà di Steve Jobs negli anni di separazione da Apple) appena comprato dal CERN idea originale di Berners-Lee: Web = ipertesto che descrivesse una varietà di risorse eterogenee (documenti, persone, gruppi di persone, organizzazioni, concetti astratti, e altro) Possibilità di collegare tra loro queste risorse con collegamenti ipertestuali etichettati, per specificare la semantica del collegamento come parte esplicita del link ispirato alle idee di Ted Nelson infrastruttura con alcune semplificazioni rispetto Nelson: tutti i collegamenti ipertestuali del Web dovevano essere percorribili in un’unica direzione (contrariamente all’organizzazione originaria di Ted Nelson con tutti i collegamenti ipertestuali pensati per essere percorribili in una direzione o nell’altra indistintamente) 1° prototipo del Web (realizzato da Tim Berners-Lee) -> ulteriore semplificazione
Web evolutosi molto negli ultimi anni Web conformatosi sempre più all’idea iniziale di Tim Berners-Lee (Web Semantico)