Skip to main content

Prova in itinere

info
  • Per l'anno accademico 2025/26 la prova in itinere è fissata durante i turni di laboratorio del giorno 27/11/2025, in aula 3D.
  • Consulta la suddivisione in turni
  • Il giorno precedente (mercoledì 26/11) si terrà una consulenza pre-itinere, per chiarire eventuali dubbi o domande specifiche

Svolgimento della prova in itinere

  • La prova ha la durata di 30 minuti, si svolgerà sui PC presenti nell'aula 3D

  • La prova verte sui contenuti delle unità T1, T2 (teoria) e P1-P6 (programmazione, fino a liste e tabelle), esclusa P5.

  • La prova consiste di 3 domande + 1 esercizio:

    • una domanda a risposta aperta sui sistemi di numerazione
    • una domanda a risposta aperta sulle architetture di elaborazione
    • una domanda a risposta aperta di teoria sul linguaggio Python
    • un esercizio di programmazione, in cui verrà richiesto di scrivere un breve frammento di codice (max 10 righe).
  • Sono ammessi gli studenti immatricolati nell'anno accademico 2025/26 (no studenti di anni precedenti)

  • Gli studenti saranno divisi in 4 turni, consultare la suddivisione in turni per consultare l'orario in cui presentarsi

  • Non è necessario prenotarsi. Non serve la prenotazione. Presentatevi senza prenotarvi. (chiaro?)

  • È permesso portare solo fogli bianchi ed una penna, ogni altro oggetto (calcolatrice, telefono, etc) dovrà rimanere spento e chiuso nello zaino

Testi degli esercizi proposti

Nota

Le soluzioni sono state presentate nella Lezione L31

Domanda 1 - Numeri

Turno 1

Si considerino i seguenti numeri in Complemento a 2, espressi in base 16 su 8 bit:

    x = C0
y = 66

Si calcoli il valore di x-y, rappresentandolo sempre su 8 bit in complemento a due su base 16, e si indichi se si verifica overflow, motivandolo.

Turno 2

Si considerino i seguenti numeri in Complemento a 2, espressi in base 8 su 8 bit:

    x = 366
y = 142

Si calcoli il valore di x-y, rappresentandolo sempre su 8 bit in complemento a due su base 8, e si indichi se si verifica overflow, motivandolo.

Turno 3

Si considerino i seguenti numeri in Complemento a 2, espressi in base 16 su 8 bit:

    x = C0
y = 86

Si calcoli il valore di x+y, rappresentandolo sempre su 8 bit in complemento a due su base 16, e si indichi se si verifica overflow, motivandolo.

Turno 4

Si considerino i seguenti numeri in Complemento a 2, espressi in base 8 su 8 bit:

    x = 366
y = 242

Si calcoli il valore di x+y, rappresentandolo sempre su 8 bit in complemento a due su base 8, e si indichi se si verifica overflow, motivandolo.

Domanda 2 - Architetture

Turno 1

Si consideri una CPU con clock a 2 GHz, 16 registri a 64 bit, una cache di primo livello di 128 kB e la capacità di eseguire un'istruzione macchina in 2 cicli di clock in media. La CPU è connessa ad una memoria RAM di 32 GB tramite bus operante a 800 MHz.

Determinare la dimensione minima del data bus e dell'address bus del sistema.

Turno 2

Si consideri una CPU con clock a 2 GHz, 16 registri a 64 bit, una cache di primo livello di 128 kB e la capacità di eseguire un'istruzione macchina in 2 cicli di clock in media. La CPU è connessa ad una memoria RAM di 32 GB tramite bus operante a 800 MHz.

Determinare il tempo necessario ad azzerare in contenuto della memoria, assumendo che sia sufficiente un'istruzione macchina per ciascuna cella da azzerare.

Turno 3

Si consideri una CPU con clock a 1.5 GHz, 32 registri a 32 bit, un disco SSD di 1.5 TB e tempo di accesso di 35 ms. La CPU è connessa ad una memoria RAM tramite bus operante a 1200 MHz.

Determinare la dimensione massima della memoria RAM, assumendo un Address Bus di 28 bit.

Turno 4

Si consideri una CPU con clock a 1.5 GHz, 32 registri a 32 bit, un disco SSD di 1.5 TB e tempo di accesso di 35 ms. La CPU è connessa ad una memoria RAM di 8 GB tramite bus operante a 1200 MHz.

Determinare la dimensione minima del data bus e dell'address bus del sistema.

Domanda 3 - Python

Turno 1

Assumento che lista sia una lista di numeri, spiegare la differenza tra un ciclo espresso come

    for x in lista:

e un ciclo come:

    for x in enumerate(lista):

Turno 2

Assumendo che nomi sia una lista di stringhe, si descriva la differenza tra l'istruzione:

    nomi[-1] = ""

e l'istruzione:

    nomi.pop()

Turno 3

Assumendo che a e b siano due liste di numeri, si descriva la differenza tra l'istruzione:

    a = a + b

e l'istruzione:

    a = [a, b]

Turno 4

Assumendo che nomi sia una lista di stringhe, si descriva la differenza tra l'istruzione:

    nomi[0] = "A"

e l'istruzione:

    nomi[0][0] = "A"

Domanda 4 - Programmazione

Turno 1

Si consideri una lista di nomi di città ed una lista di temperature corrispondenti alle città. Si scriva un frammento di codice che stampi tutte le città, con la relativa temperatura a fianco di ciascuna. Si stampi anche il nome della città con la temperatura più alta.

Nota: nel frammento di codice è possibile inserire dei dati di prova, definendo direttamente le liste all'interno del codice (non effettuare input da tastiera).

Esempio:

Dati di ingresso:

citta = ["Torino", "Milano", "Roma", "Napoli", "Palermo"]
temperature = [15, 18, 22, 24, 26]

Output atteso:

Torino: 15°C
Milano: 18°C
Roma: 22°C
Napoli: 24°C
Palermo: 26°C

Città più calda: Palermo (26°C)
Una possibile soluzione
citta = ["Torino", "Milano", "Roma", "Napoli", "Palermo"]
temperature = [15, 18, 22, 24, 26]

calda = 0
for i in range(len(citta)):
print(f"{citta[i]} = {temperature[i]} °C")
if temperature[i] > temperature[calda]:
calda = i

print(f"La città più calda è {citta[calda]} ({temperature[calda]} °C)")

Turno 2

Si consideri una tabella contenente N righe e 2 colonne, in cui le due colonne rappresentino le coordinate X e Y di N punti in un piano cartesiano. Si scriva un frammento di codice che calcoli e stampi la distanza euclidea tra ogni coppia di punti nella tabella.

Nota: nel frammento di codice è possibile inserire dei dati di prova, definendo direttamente le liste all'interno del codice (non effettuare input da tastiera).

Esempio:

Dati di ingresso:

punti = [[1, 2], [4, 6], [7, 8]]  

Output atteso:

Distanza tra [1, 2] e [4, 6] = 2.24
Distanza tra [1, 2] e [7, 8] = 5.48
Distanza tra [4, 6] e [1, 2] = 3.61
Distanza tra [4, 6] e [7, 8] = 2.65
Distanza tra [7, 8] e [1, 2] = 6.48
Distanza tra [7, 8] e [4, 6] = 3.32
Una possibile soluzione
import math

punti = [[1, 2], [4, 6], [7, 8]]

for p1 in punti:
for p2 in punti:
if p1 != p2:
dist = math.sqrt((p2[0]-p1[0])**2 + (p2[1]-p1[1])**2)
print(f"Distanza tra {p1} e {p2} = {dist:.2f}")

Turno 3

Si consideri una serie di temperature registrate in una città, con una misurazione al giorno, per N giorni consecutivi. Si scriva un frammento di codice che calcoli e stampi il quale giorno la media dellle temperature dei 3 giorni adiacenti (giorno precedente, giorno corrente, giorno successivo) è stata la più alta.

Nota: nel frammento di codice è possibile inserire dei dati di prova, definendo direttamente le liste all'interno del codice (non effettuare input da tastiera).

Esempio: Dati di ingresso:

temperature = [15, 18, 22, 24, 26, 20, 19]

Output atteso:

Temperatura massima nei giorni 2, 3, 4, con media 24.00
Una possibile soluzione
temperature = [15, 18, 22, 24, 26, 20, 19]

max_media = -300
pos_max = -1

# Alternativa: inizializzo calcolando la media tra le prime 3 temperature
# max_media = sum(temperature[0:3])/3
# pos_max = 1
# poi nel ciclo for posso iniziare il range dalla posizione 2

for pos in range(1, len(temperature)-1):
media = (temperature[pos]+temperature[pos-1]+temperature[pos+1])/3
media = sum(temperature[pos-1:pos+2])/3 # alternativa
if media > max_media:
max_media = media
pos_max = pos

print(f"La temperatura massima è nei giorni {pos_max-1}, {pos_max}, {pos_max+1} e vale {max_media:.2f}")

Turno 4

Si consideri una lista contenente N password segrete (sequenze di 8 caratteri ciascuna), ed una nuova stringa di 8 caratteri fornita dall'utente. Si scriva un frammento di codice che verifichi se la nuova password è identica ad una delle password segrete, oppure se tale password differisce di un solo carattere da una delle password segrete.

Nota: nel frammento di codice è possibile inserire dei dati di prova, definendo direttamente le liste all'interno del codice (non effettuare input da tastiera).

Esempio:

Dati di ingresso:

segrete = ["abc12345", "passw0rd", "letmein1", "qwerty12"]
nuova = "abc12346"

Output atteso:

Password abc12346 simile a abc12345
Una possibile soluzione
segrete = ["abc12345", "passw0rd", "letmein1", "qwerty12"]
nuova = "abc12346"

# Nota: si dà per scontato che tutte le stringhe abbiano esattamente 8 caratteri

# Verifico innanzitutto se la password compare esattamente nella lista
if nuova in segrete:
print(f'Passord {nuova} trovata')
else:
# verifico una ad una, contando i caratteri diversi
for s in segrete:
## conta caratteri diversi tra 'nuova' e 's'
cnt = 0
for i in range(len(s)):
if s[i]!=nuova[i]: # confronta carattere i-esimo
cnt = cnt + 1
if cnt==1: # esattamente 1 carattere di differenza
print(f'Password {nuova} simile a {s}')

Altre Informazioni