
























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
Una panoramica generale dell'informatica di base, spiegando concetti fondamentali come la definizione di computer, le strutture dati ad albero e gli algoritmi. Viene inoltre esplorato il ruolo del linguaggio di programmazione e della comunicazione tra l'istruttore e il computer. Il documento conclude con una spiegazione dei diagrammi di flusso e dell'esecuzione di un algoritmo.
Tipologia: Appunti
1 / 32
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!

























Definizione vocabolare di Computer : macchina programmabile in grado di elaborare dati rappresentati mediante caratteri alfanumerici codificati in vario modo. Tali dati sono sottoposti a procedimenti aritmetici e logici , quindi vengono memorizzati negli archivi e resi disponibili per reperimento e trasmissione. Il termine " computer ", originariamente utilizzato per riferirsi a persone che eseguivano calcoli matematici manualmente , iniziò a riferirsi alle macchine elettroniche per l'elaborazione dei dati solo a partire dal XX secolo. Definizione vocabolare di Computare : verbo che deriva dal latino " computare ", che significa "calcolare" o "contare". In termini lessicali o vocabolari, la definizione di "computare" è: "Eseguire calcoli matematici o operazioni aritmetiche per ottenere risultati numerici.” Quindi, ogni agente, sia esso umano o macchina, capace di effettuare calcoli e produrre una risposta (l’ output ) partendo da qualsiasi informazione iniziale (l’ input ) può essere definito come un Computer. Esempi di " computatori umani " come Alexis Claude Clairaut e i suoi collaboratori, condussero una serie di calcoli dettagliati per determinare le coordinate e le traiettorie di oggetti extraterrestri (come la cometa di Halley). Inoltre, i "calcolatori umani" vennero impiegati anche da Napoleone Bonaparte, il quale ordinò la creazione di tabelle matematiche per la conversione tra il vecchio sistema di misurazione imperiale e il nuovo sistema metrico (Tutt’oggi in uso). Le direttive di conversione fornite dai clienti ai commercianti di tessuti fungevano da input , mentre il commerciante-computer effettuando la conversione dalla vecchia unità di misura al nuovo sistema metrico , produceva un output che si traduceva nel taglio del tessuto alla misura richiesta dal cliente.
Tuttavia, i calcolatori umani presentano limiti e possono richiedere tempi notevoli per eseguire calcoli estesi, i quali possono anche comportare possibili errori.
Attraverso le “ strutture dati ” è possibile immagazzinare i dati nel modo più generico possibile, così da venir riutilizzati in altre occasioni. Queste possono essere di vario tipo:
1. Lista Sequenza di elementi ordinati e ripetibili, la cui quantità può essere determinata poiché è possibile conoscere il numero di elementi contenuti nella lista in un dato momento. - I suoi elementi sono ordinati poiché sono disposti in uno specifico ordine di precedenza tra di loro, che viene mantenuto anche quando vengono aggiunti o rimossi determinati elementi. - Gli elementi in una lista sono ripetibili , consentendogli di comparire più di una volta. ES. Se provassimo a creare una lista con i caratteri della parola "pensiero", la lettera "e" apparirebbe due volte: una in seconda posizione e un'altra in sesta posizione. ES. Possiamo considerare l'indice di un libro o una lista di riferimenti bibliografici in un articolo scientifico come esempi concreti che si basano sulla nozione astratta di lista. 2. Pila La pila è una struttura dati visualizzabile dal basso verso l’alto , e che prevede un insieme specifico di operazioni eseguibili sugli elementi contenuti all'interno di essa. Tra queste vi è l’aggiunta e la rimozione degli elementi attraverso la strategia chiamata " last in, first out " ( LIFO ) → L'elemento inserito più di recente è il primo ad essere rimosso se richiesto. Nel caso si desideri rimuovere un elemento intermedio nella pila, sarà prima necessario scartare tutti gli elementi posti sopra di esso, procedendo dall'elemento più recente a quello più vecchio. 3. Coda Sequenza di elementi visualizzabile da sinistra verso destra , caratterizzata da un insieme specifico di operazioni che possono essere eseguite sugli elementi contenuti al suo interno. La caratteristica principale di questa struttura riguarda le operazioni di inserimento e rimozione degli elementi, che seguono la strategia " first in, first out " ( FIFO )
→ L'elemento aggiunto per primo è anche il primo a essere rimosso in risposta a una richiesta. In pratica, il primo elemento inserito nella struttura occupa la posizione più a sinistra della coda e, conseguentemente, è il primo ad essere rimosso quando richiesto. In maniera analoga a quanto avviene nelle pile, anche nelle code, per rimuovere un elemento in una posizione intermedia, è necessario prima eliminare tutti gli elementi che sono stati inseriti prima di esso.
4. Insieme Raccolta di elementi privi di un ordine specifico e non ripetibili , soggetti a conteggio. Gli elementi in esso contenuti non seguono un ordine particolare a causa del modo in cui sono inseriti, il che non implica alcuna correlazione di cardinalità tra di loro. Inoltre, ciascun elemento è irripetibile , impedendo così allo stesso valore di comparire più volte. 5. Dizionario Un dizionario (anche chiamato array associativo ) è una raccolta non ordinata e non ripetibile di elementi definiti da coppie chiave-valore soggette a conteggio. Analogamente agli insiemi, gli elementi qui contenuti non seguono un ordine specifico a causa della mancanza di una relazione di cardinalità tra di essi. Inoltre, le chiavi in ogni coppia non sono ripetibili poiché la stessa chiave non può essere utilizzata più di una volta all'interno del dizionario. 6. Albero L'attività di marcatura di un testo , ossia l’aggiunta di annotazioni a un testo per riconoscere i diversi ruoli strutturali e semantici delle sue componenti (l’identificazione delle sezioni, dei capoversi, dei dialoghi ecc.), avviene sistematicamente e, spesso, inconsciamente ogni volta che esaminiamo un documento o semplicemente lo leggiamo. Prendendo ad esempio " Alice nel Paese delle Meraviglie ", possiamo notare che specifici blocchi di testo vengono individuati attraverso i capoversi. A loro volta, questi capoversi sono organizzati in capitoli , che contribuiscono a formare il libro nel suo complesso. In aggiunta, ogni capoverso può contenere altre strutture, come i dialoghi dei personaggi.
7. Grafo Questa struttura dati trova origine in un problema matematico inerente a sette ponti nella città di Königsberg. La questione principale era: è possibile compiere un percorso attraverso la città passando una e una sola volta su ciascun ponte? Numerose persone hanno cercato di risolvere questo enigma, ma è stato Leonhard Euler nel 1736 a dimostrarne l'impossibilità tramite una dimostrazione matematica formale. Nella sua dimostrazione, Euler ha descritto, in modo astratto, le quattro sezioni di terra di Königsberg come una rete di nodi interconnessi da archi. Ogni arco rappresentava un ponte tra due lembi di terra. Sfruttando questa rappresentazione astratta, poi denominata " grafo ", Euler dimostrò che non esiste una soluzione al problema dei sette ponti di Königsberg. Il suo ragionamento si basò sulla necessità che ogni nodo, ad eccezione di quello iniziale e finale , dovesse possedere un numero pari di archi per essere raggiunto e lasciato. Questa condizione era pratica in quanto rifletteva il movimento di una persona attraverso le sezioni di terra. Ad ogni ingresso in un nodo corrispondeva un percorso su un arco, mentre un ulteriore arco era richiesto per uscire dal nodo. Dunque, per poter essere attraversato, ogni nodo (eccetto l'inizio e la fine) doveva avere un numero pari di archi, consentendo passaggi multipli. Tuttavia, i nodi nell'illustrazione avevano tutti un numero dispari di archi, andando così in contrasto con il requisito stabilito. Di conseguenza, con questa configurazione, il problema dei sette ponti non poteva essere risolto. ES. Percorsi tra città, relazioni tra individui nei social network, struttura dei link ipertestuali tra pagine Web, e relazioni concettuali all'interno di basi di dati o knowledge graph, impiegati da servizi quali Google, Amazon e Facebook. Questa struttura dati si basa sull'omonimo concetto matematico introdotto da Euler ed è suddivisa in due categorie principali:
( Es. Grafo in cui le frecce indicano la direzione del percorso - tra il nodo "1" e il nodo "2" esistono due archi che consentono il percorso solo dal primo nodo al secondo, ma non viceversa).
programmazione rappresenta l'arte di istruire un computer a compiere specifiche azioni. Questo processo si basa sulla comunicazione tra un istruttore e il computer attraverso l'utilizzo di un linguaggio appositamente sviluppato. Tale linguaggio, noto come linguaggio di programmazione , funge da intermediario di comunicazione, rendendo possibile una comprensione reciproca tra l'istruttore umano e la macchina.
Definire un algoritmo: La definizione generica di algoritmo include tutte le possibili situazioni e possibili output corrispondenti (è una mappatura dei possibili percorsi); Mediante i diagrammi di flusso, un qualunque algoritmo è definito usando due oggetti terminali, che identificano l’inizio e la fine dell’algoritmo. Eseguire un algoritmo: Per eseguire un algoritmo scelgo un input specifico e percorro il diagramma di flusso, restituendo un solo valore in base alle condizioni della situazione specifica. Versione semplificata di Esempio di algoritmo ↑ : (no elemento di processo) Prendendo in Input solo due stringhe, una parola e un riferimento bibliografico, si restituisce come output: a. 1 se la parola è contenuta nel riferimento bibliografico; b. 0 altrimenti. Oltre ai terminali di inizio e fine, abbiamo usato tre oggetti di input / output al fine di acquisire i valori specificati come input e per restituire, di conseguenza, in output 0 o 1. 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. Versione completa di Esempio di algoritmo ↑ : Esistono diversi modi per implementare l'algoritmo originale. È possibile, infatti, creare un diagramma di flusso alternativo che, però, risolve correttamente e in modo accurato il problema descritto dall'algoritmo in linguaggio naturale.
La definizione di un algoritmo è un processo creativo, poiché ci sono molteplici approcci possibili per risolvere un problema. Questi algoritmi possono essere altrettanto efficaci ma variare in lunghezza (con un numero diverso di operazioni) e in eleganza (differire in chiarezza e struttura). Nel diagramma di flusso, il primo oggetto di processo viene inizializzato a 0 e implicitamente associato a una variabile , denominata " result value " nella figura, che rappresenta il risultato restituito alla fine dell'esecuzione dell'algoritmo. Questo concetto è simile all'utilizzo di una variabile in un calcolo matematico in cui assegniamo un valore a "x" e, attraverso modifiche (ad esempio, "somma +1"), otteniamo una variabile aggiornata (nel caso iniziale, da 0 a 1). Il risultato finale, associato a "result value," rappresenta ciò che l'algoritmo restituirà se entrambe le parole in input non sono contenute nel riferimento bibliografico specificato. Il processo successivo è seguito da due oggetti decisionali consecutivi, che controllano le due condizioni: se la prima parola è contenuta nel riferimento bibliografico e se la seconda parola è contenuta nello stesso riferimento. Se entrambe le condizioni sono verificate, si esegue un incremento di 1 al risultato finale attraverso l'uso di altri oggetti di processo. Alla fine, qualsiasi valore associato al risultato finale viene restituito da un singolo oggetto di output, concludendo l'esecuzione dell’algoritmo.
Russell è stato in grado di creare una situazione paradossale basandosi sul sistema degli insiemi di Cantor, dimostrando la sua contraddizione interna e, di conseguenza, invalidando il lavoro di Frege, il quale aveva adottato il sistema di Cantor come fondamento. Un'altra variante interessante di questo tipo di paradosso è il paradosso del bibliotecario (noto anche come paradosso del barbiere ): Nella Biblioteca di Babele, le persone sono divise in due categorie, quelle che cercano i libri da sole e quelle che hanno bisogno dell'aiuto del bibliotecario. Tuttavia, una di queste persone è il bibliotecario stesso, il quale cerca i libri solo per chi ne ha bisogno. Ciò solleva la domanda: chi cerca i libri per il bibliotecario e a quale categoria appartiene? La risoluzione del paradosso mette in luce una contraddizione intrinseca, portando a una riflessione profonda sulla natura della situazione. Un importante problema informatico legato alla teoria della computazione è noto come " problema della terminazione ". Questo problema era uno dei 23 problemi matematici aperti proposti da David Hilbert nel 1900. In sostanza, si chiedeva se fosse possibile sviluppare un algoritmo in grado di determinare se un altro algoritmo, specificato come input, avrebbe terminato la sua esecuzione o continuato all'infinito. Questo problema introduceva una sfida fondamentale nell'informatica, poiché coinvolgeva la dipendenza di un algoritmo dall'output di un altro. È anche possibile, però, sviluppare un algoritmo che non termina mai: Un algoritmo diventa infinito quando non si riesce mai a uscire da un loop decisionale , quando la condizione è sempre vera o mai.
Quindi, poiché esistono algoritmi che terminano e altri che non lo fanno mai, è possibile concepire un algoritmo che produca un output diverso in base all’appartenenza di un altro algoritmo alla categoria dei finiti e o degli infiniti? (un algoritmo che determini se un altro algoritmo è infinito o no). Avere un modo per stabilire sistematicamente se un algoritmo termina o meno potrebbe consentire di identificare rapidamente quegli algoritmi che non funzionano correttamente. Un pioniere nell'affrontare questa sfida fu Alan Turing, considerato uno dei padri dell'informatica teorica e dell'intelligenza artificiale. I suoi contributi spaziarono in vari campi, tra cui matematica (ad esempio, i suoi sforzi nella decodifica della macchina Enigma), logica (con l'introduzione della macchina di Turing nel 1937 ), filosofia (esaminando il legame tra computer ed intelligenza nel 1950) e biologia (rivelando processi di creazione di pattern in natura nel 1952). Nel 1936 , Turing concepì una macchina teorica per cercare di affrontare il problema della terminazione di Hilbert. La macchina di Turing, pur essendo una costruzione puramente teorica, era concepibile in termini fisici poiché prevedeva un nastro infinito per memorizzare dati infiniti. La macchina è formata da una serie di celle su un nastro di memoria infinito , ognuna contenente un simbolo ( 0 o 1 ) che può essere letto o scritto dalla testina della macchina. La macchina di Turing opera in base a uno stato attuale annotato e un insieme finito di istruzioni definito in una tabella. Queste istruzioni determinano cosa deve fare la macchina (come scrivere un nuovo simbolo, spostare la testina a sinistra o a destra e passare a uno stato differente) in base allo stato attuale e al simbolo sotto la testina. La macchina ha anche uno stato iniziale e uno o più stati finali per indicare l'inizio e la fine del processo. Turing utilizzò questa macchina per dimostrare una soluzione per il problema della terminazione basata sul principio di riduzione all’assurdo: Supponiamo che sia possibile creare un algoritmo chiamato "termina?", che prende in input un altro algoritmo e restituisce "vero" se l'algoritmo in input termina, altrimenti restituisce "falso."
L'unica spiegazione logica è che l'ipotetico algoritmo "Termina?" che utilizziamo per determinare se un algoritmo termina o meno non può essere sviluppato. Pertanto, la risposta al problema della terminazione è che un algoritmo che verifica la terminazione di un altro algoritmo non può esistere. Questo risultato ha avuto un impatto significativo sulla comprensione delle capacità computazionali dei computer. In pratica, la macchina di Turing e le analisi correlate hanno stabilito limiti chiari su ciò che può essere calcolato da un punto di vista algoritmico. Hanno dimostrato che alcune sfide computazionali, come la determinazione della terminazione, non possono essere risolte mediante approcci algoritmici.
Nonostante il dibattito sulla visione del linguaggio umano, Chomsky ha contribuito in modo significativo a stabilire basi rigorose per la ricerca sulle relazioni tra competenza e produzione linguistica, sullo sviluppo delle abilità linguistiche innate e sociali, e sulla distinzione tra sintassi e semantica, lessico e discorso, rappresentazioni logiche e rappresentazioni mentali. Le grammatiche formali sono uno strumento matematico usato per definire la sintassi di un linguaggio , sia esso una lingua naturale come l'italiano o un linguaggio artificiale. Le grammatiche formali si basano su un insieme finito di regole di produzione che consentono di costruire frasi valide per un linguaggio specifico. Queste regole includono simboli terminali (elementi del linguaggio, come nomi o verbi, specificati tra virgolette in BNF ) e simboli non terminali (elementi sostituibili da una combinazione di simboli terminali e non terminali, specificati tra parentesi angolari in BNF ). L'applicazione delle regole di produzione riguarda la sostituzione dei simboli nella premessa con quelli specificati nell'espressione, fino a ottenere una sequenza contenente solo simboli terminali. Ogni grammatica formale deve anche specificare un simbolo di inizio, che non deve essere terminale.