Esame di Fondamenti di Programmazione e Linguaggi Computazionali

Andiamo a vedere le domande dell’esame di fondamenti di programmazione e linguaggi computazionali

Domande

  1. Fornire una definizione rigorosa di linguaggio di programmazione, esplicitando la distinzione tra linguaggio naturale e linguaggio formale, e motivare la necessità di quest’ultimo nel contesto del calcolo automatico.
  2. Distinguere in modo sistematico tra i concetti di comando, programma e algoritmo, fornendo per ciascuno una definizione formale e un esempio concreto, sia in linguaggio naturale che in notazione computazionale.
  3. Analizzare criticamente la differenza tra una istruzione data a un computer tramite linguaggio di programmazione e una richiesta formulata a un sistema di intelligenza artificiale tramite prompt, come nel caso di ChatGPT, con riferimento a determinismo, interpretazione e controllo sintattico e semantico.
  4. Definire con precisione cosa si intende per comando in informatica, elencando i principali contesti applicativi e presentando almeno due esempi tecnici, esplicitando input, output e side effects.
  5. Analizzare il concetto di programmazione intesa come sequenza di comandi rispetto alla programmazione intesa come formulazione di algoritmi, discutendo limiti e potenzialità di entrambi gli approcci.
  6. Definire formalmente i concetti di sintassi e semantica in un linguaggio di programmazione. Fornire un esempio dettagliato di errore sintattico e uno di errore semantico, motivando la distinzione attraverso il formalismo di riferimento.
  7. Descrivere il funzionamento e la logica di utilizzo dei comandi in un ambiente shell Unix o Linux. Analizzare le caratteristiche fondamentali di un comando shell, discutendo la gestione degli argomenti, delle opzioni e del piping, e fornire un esempio articolato.
  8. Argomentare in modo critico l’importanza della distinzione tra sintassi e semantica nella progettazione e nello sviluppo software. Discutere quali rischi e problemi possono emergere da errori sintattici e da errori semantici, presentando almeno un caso d’uso reale.

Soluzioni

    Domanda 1

Un linguaggio di programmazione è un linguaggio formale, cioè un sistema di simboli e di regole per la loro combinazione, dotato di una sintassi rigorosa e di una semantica ben definita. A differenza del linguaggio naturale, che è caratterizzato da ambiguità, ridondanza e una forte dipendenza dal contesto, il linguaggio di programmazione è progettato per essere non ambiguo, deterministico e privo di interpretazioni soggettive. Questa necessità nasce dal fatto che il calcolo automatico richiede istruzioni che siano espresse in modo tale da poter essere interpretate in maniera univoca da una macchina, senza margine per dubbi o interpretazioni multiple.

Esempio concreto

Consideriamo l’ambiguità del linguaggio naturale rispetto alla precisione del linguaggio formale:

Linguaggio naturale (ambiguo): “Calcola la radice del numero

Linguaggio formale (non ambiguo):

 1. import math
 2.  
 3. def calcola_radice_quadrata(numero):
 4.     if numero < 0:
 5.         raise ValueError("Numero negativo non supportato")
 6.     return math.sqrt(numero)
 7.  
 8. risultato = calcola_radice_quadrata(16)
 9. print(f"La radice quadrata e: {risultato}")

Domanda 2

Il concetto di comando si riferisce a una istruzione atomica, la quale viene eseguita direttamente da un interprete o da una shell. Un esempio in linguaggio naturale può essere “visualizza i file nella directory corrente”, mentre in ambiente Bash questo comando si traduce in ls.

Il programma rappresenta invece una sequenza ordinata e strutturata di comandi e istruzioni, implementata secondo la sintassi di un linguaggio di programmazione, con lo scopo di ottenere una funzione computazionale più complessa. Se, ad esempio, si desidera ordinare una lista di numeri e visualizzare il risultato, in Python si può scrivere il codice:

1. numbers=[3,1,2]
2. numbers.sort()
3. print(numbers)

1. numbers = [3, 1, 2]
 2. numbers.sort()
 3. print(numbers)
 4. def bubble_sort(lista):
 5.     n = len(lista)
 6.     for i in range(n):
 7.         scambiato = False
 8.         for j in range(0, n - i - 1):
 9.             if lista[j] > lista[j + 1]:
10.                 # Scambio elementi adiacenti
11.                 lista[j], lista[j + 1] = lista[j + 1], lista[j]
12.                 scambiato = True
13.         # Se non ci sono stati scambi, la lista e ordinata
14.         if not scambiato:
15.             break
16.     return lista
17.  
18. # Esempio di utilizzo
19. numeri = [64, 34, 25, 12, 22, 11, 90]
20. print(f"Lista originale: {numeri}")
21. numeri_ordinati = bubble_sort(numeri.copy())
22. print(f"Lista ordinata: {numeri_ordinati}")


1.1       Domanda 3

La differenza tra una istruzione computazionale, cioè fornita a un computer tramite un linguaggio di programmazione, e una richiesta espressa a un sistema di intelligenza artificiale tramite prompt in linguaggio naturale, come nel caso di ChatGPT, è fondamentale. L’istruzione data a un computer mediante linguaggio di programmazione si basa su regole rigorose di sintassi e semantica e produce effetti deterministici: a parità di input, il risultato sarà sempre identico. Un prompt indirizzato a un’intelligenza artificiale, invece, è una richiesta aperta e informale, scritta in linguaggio naturale e soggetta a interpretazione probabilistica e statistica da parte del modello. In questo caso, il controllo formale sintattico e semantico è assente o molto debole e la risposta può variare anche a parità di input, essendo influenzata dallo stato interno del modello e da meccanismi di generazione non deterministici. Il prompt si basa quindi sulla flessibilità interpretativa, mentre la programmazione classica sulla rigidità formale.

Esempio di determinismo vs non-determinismo:

Istruzione deterministica (sempre stesso risultato):

1. def calcola_fattoriale(n):
2.     if n == 0 or n == 1:
3.         return 1
4.     else:
...............

Se vuoi approfondire con esempi svolti e spiegazioni dettagliate, scarica subito il documento completo cliccando qui sotto:

Ti è stato utile questo articolo su fondamenti di programmazione e linguaggi computazionali?

Oltre a questo articolo, non perdere l’occasione di migliorare le tue conoscenze e ottenere risultati eccellenti. Contattaci ora per verificare la disponibilità e prenota la tua lezione privata su Esercizi Svolti per eccellere nelle materie scientifiche, da qualsiasi luogo con una connessione internet! LEZIONI PRIVATE \( \rightarrow \) CLICCA QUI

Oltre a questo articolo ti consigliamo..

Di visitare il nostro negozio, dove puoi acquistare altri file in formato word per integrare i tuoi appunti. \( \rightarrow \) CLICCA QUI

Immagine descrittiva dell’esame di fondamenti di programmazione e linguaggi computazionali

fondamenti di programmazione
Translate »

Scopri di più da La soluzione per gli studenti

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continua a leggere