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


Introduzione all'Informatica di Base - Prof. Peroni, Appunti di Fondamenti di informatica

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

2022/2023

Caricato il 24/04/2024

SimoneDrovandi
SimoneDrovandi 🇮🇹

4.6

(11)

49 documenti

1 / 32

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA DI BASE
Computer, pensiero computazionale e strutture dati:
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.
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20

Anteprima parziale del testo

Scarica Introduzione all'Informatica di Base - Prof. Peroni e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA DI BASE

Computer, pensiero computazionale e strutture dati:

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.

Charles Babbage ( 1791-1871 ):

  • La macchina differenziale: Nel 1822 , Charles Babbage sviluppò il prototipo parziale della Macchina Differenziale , un dispositivo che mirava a eseguire operazioni analoghe a quelle compiute dai calcolatori umani, ma in modo automatico, veloce e privo di errori. Il prototipo venne presentato nella sua abitazione a Londra, luogo in cui teneva incontri intellettuali noti come “ Table Talks ”. Tuttavia, le limitazioni tecniche dell'epoca e le sfide finanziarie resero difficile la realizzazione completa del progetto. Infatti, la Macchina Differenziale aveva una limitazione considerevole: mancava della programmabilità. Era in grado di utilizzare solo un insieme ristretto di operazioni sull'input fornito. Mentre le operazioni disponibili erano fisse e prestabilite, l'aggiunta di nuove operazioni non era possibile. Questo significava che le capacità della macchina erano confinate a un numero limitato di operazioni predefinite , e non c'era modo di espandere le sue funzionalità o introdurre nuove operazioni per diversi tipi di input.
  • La macchina analitica: Nel 1837, Charles Babbage progettò la Macchina Analitica , tuttavia non fu mai in grado di realizzarla fisicamente. A differenza del precedente progetto, la nuova macchina rendeva possibile l’introduzione di nuove operazioni, aprendo la strada a una vasta gamma di calcoli procedurali, rendendola così il primo computer meccanico a general-purpose della storia. Diversamente dal suo predecessore, la Macchina Analitica era in grado di ricevere istruzioni e dati mediante l’uso di schede perforate , evitando all’user di manipolare fisicamente la macchina per farla funzionare. Questo nuovo sistema di input, privo di leve e pulsanti, fu talmente rivoluzionario da venir implementato nel primo computer (1940-46).

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:

  1. Grafi non orientati (utilizzato da Euler per risolvere il problema dei sette ponti) : L’arco può essere attraversato in entrambe le direzioni.
  2. Grafi orientati: Ogni arco specifica chiaramente la direzione del percorso.

( 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).

Algoritmi e computabilità:

Ada Lovelace ( 1815-1852 ):

  • La Macchina Analitica: Ada Lovelace, figlia del celebre poeta Lord Byron, è una figura di rilievo nella storia dell'informatica grazie al suo eccezionale contributo pionieristico. Orfana di padre, fu cresciuta dalla madre, la quale la incoraggiò a coltivare l'interesse per la matematica. Il suo legame con Charles Babbage è stato fondamentale per il suo esordio nell'emergente campo dell'informatica. Nel 1833 partecipò a un incontro organizzato da Babbage per presentare la Macchina Differenziale. Questa esperienza la colpì tanto profondamente che tra i due nacque una corrispondenza epistolare perdurata ben 27 anni, durante la quale sviluppò ulteriormente le sue idee. Uno dei suoi contributi più noti è la sua traduzione in inglese del primo articolo sulla Macchina Analitica , originariamente scritto da Luigi Federico Menabrea. Ada arricchì questa traduzione con un ampio numero di annotazioni e riflessioni personali. Tra queste annotazioni, si trova una descrizione dettagliata di come la Macchina Analitica sarebbe potuta essere utilizzata per calcolare i numeri di Bernoulli , includendo istruzioni (nel linguaggio della macchina) in forma di programma per il calcolo di questa serie matematica. Questo rappresenta il primo programma – nonché il primo algoritmo – mai scritto per un computer digitale, e fu creato da Ada nonostante la Macchina Analitica fosse soltanto un concetto teorico. Ada Lovelace è riconosciuta per essere stata la prima programmatrice della storia , in quanto ha sviluppato un programma per una macchina puramente teorica. Inoltre, la sua formulazione dell’" scienza astratta delle operazioni " in uno dei suoi scritti anticipa concetti fondamentali dell'informatica, come la metodologia e la

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.

  • Definizione di Algoritmo: Gli algoritmi accompagnano in modo sistematico le attività della vita quotidiana. Ad esempio, seguono procedure passo-passo necessarie per preparare dei salatini, assemblare una specifica lampada o persino per seguire uno spartito musicale. Pur avendo scopi radicalmente diversi, i due esempi condividono una nozione astratta fondamentale: l'istruzione per generare qualcosa partendo da materiali iniziali a disposizione. Questo concetto incarna pienamente l'essenza di un algoritmo. La parola "algoritmo" deriva dalla combinazione della latina " algorismus " (latinizzazione del nome di Al-Khwarizmi, un eminente matematico persiano dell'ottavo secolo) e della greca " arithmos ", che significa "numero". In sintesi, un algoritmo rappresenta l' astrazione di una procedura passo-passo che accetta un input e produce un output specifico. Ogni algoritmo è formulato in un linguaggio specifico , in modo che le istruzioni che lo compongono siano chiare per un computer, sia esso umano o macchina. Questo processo consente di ottenere un output desiderato attraverso l'elaborazione dell'input fornito. Qual’è il ruolo del programmatore? Un programmatore è un individuo che crea algoritmi e li traduce in programmi mediante l'utilizzo di un linguaggio comprensibile per il computer. Nel contesto elettronico, il termine "computer" fa riferimento ai dispositivi elettronici (i computer umani non vengono programmati). Tuttavia, spogliandoci dalla definizione tecnica di "programma", un programmatore è chiunque abbia la capacità di formulare algoritmi interpretabili da qualsiasi computer, umano o elettronico che sia.
  • Diagrammi di flusso: Nel tentativo di comunicare una serie di operazioni a un computer, si riscontra la mancanza di un linguaggio standard universalmente comprensibile. Esistono infatti numerosi linguaggi con diversi approcci alla visualizzazione di una serie di istruzioni. Gli informatici attingono a uno strumento noto come Pseudocodice quando intendono descrivere un particolare algoritmo: Il Pseudocodice costituisce un linguaggio informale facilmente interpretato da qualsiasi computer, sebbene sia spesso adoperato per comunicare i passaggi essenziali di un algoritmo ad un umano. Pur non essendo eseguibile da un computer elettronico, il Pseudocodice è intrecciato con i concetti proposti nei linguaggi di programmazione. Ogni algoritmo può essere espresso mediante Pseudocodice e, in teoria, questo può essere a sua volta tradotto in vari linguaggi di programmazione. Tuttavia, la distinzione principale risiede nel fatto che il Pseudocodice talvolta permette l'utilizzo di espressioni più semplici, proprie del linguaggio naturale, mentre nei linguaggi di programmazione è essenziale specificare ogni passaggio con precisione. Un' alternativa grafica al comune Pseudocodice è il Diagramma di Flusso , una forma visuale facilmente comprensibile per gli esseri umani. Questo tipo specifico di diagramma fornisce una rappresentazione grafica degli algoritmi , basata su un insieme ristretto di elementi grafici. Oggetto grafico Nome Definizione Linea di flusso Servono a definire l’ ordine in cui le operazioni vengono eseguite. Il flusso, indicato dalla freccia, parte da un terminale di partenza e finisce in un terminale di fine. Terminale Stabiliscono l’inizio e la fine di un algoritmo. Questo componente essenziale contiene un testo, che serve a chiarire il suo ruolo all'interno del contesto dell'algoritmo.

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.

Linguaggi di programmazione:

Noam Chomsky ( 1928- ):

  • Definizioni di “linguaggio” e grammatica formale di Chomsky: Il linguaggio naturale, come l'italiano, sia scritto che orale, si è sviluppato spontaneamente all'interno delle comunità umane. Questi linguaggi così altamente espressivi possono risultare ambigui nel fornire istruzioni specifiche. Tuttavia, possiamo risolvere l'ambiguità del significato di una frase utilizzando convenzioni sociali o analizzando il contesto in cui l'azione ha luogo, riducendo così le possibili interpretazioni delle informazioni. La formalizzazione del linguaggio naturale, sebbene per definizione non sia formale, è oggetto di studio nella linguistica che, utilizzando strumenti matematici, cerca di renderlo formale. Ad esempio, Noam Chomsky , una figura fondamentale nella linguistica moderna, ha condotto ricerche che hanno portato a due ipotesi principali sul linguaggio umano:
  1. La struttura sintattica di base del linguaggio può essere rappresentata mediante una teoria matematica.
  2. Questa struttura è biologicamente determinata in tutti gli esseri umani, presente fin dalla nascita, un'evoluzione unica condivisa solo dagli esseri umani nel mondo animale.

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.

  • (^) < > → racchiude un simbolo non terminale , ossia un elemento grammaticale che può essere sostituito da una combinazione di simboli terminali (come parole o token) e simboli non terminali;
  • (^) ::= → utilizzato per indicare la relazione tra una premessa e un'espressione nelle regole di produzione di una grammatica formale. Questa notazione definisce come un simbolo può essere sostituito da un altro nell'ambito della grammatica ).
  • (^) “ ” → racchiude un simbolo terminale , ossia un elemento del linguaggio che non può essere ulteriormente scomposto o sostituito all'interno delle regole di produzione. I simboli terminali sono elementi fondamentali del linguaggio, come parole o token. ES. Regole di produzione:
  1. ::= “Io” ;