Prova in itinere
- 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
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
- È possibile consultare testi e soluzioni delle prove in itinere dell'anno 2024/25
- Si ricorda che sono disponibili tutte le domande d'esame degli anni precedenti