Dom 18 Agosto, 06:47:03 - 2019

Autore Topic: Testi d'esame  (Letto 759 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Mulan

  • Administrator
  • Studente di Dottorato
  • *******
  • Post: 245
  • FeedBack: +45/-0
    • Mostra profilo
Testi d'esame
« il: Ven 24 Luglio, 15:57:01 - 2015 »
Ciao! Qui raccogliamo i testi d'esame per gli appelli del corso di Fondamenti di Informatica I.
Se manca qualche appello aggiungetelo e poi li raccogliamo tutti in questo primo messaggio.
Per commentare le soluzioni vi chiedo di aprire un nuovo topic che sarà poi linkato qui accanto al corrispondente appello. :)

27 Gennaio 2015
Python (testo e soluzioni)

16 Febbraio 2015
Python (testo)
Soluzione compito A

15 Giugno 2015
Python (testo e soluzioni)
« Ultima modifica: Dom 11 Ottobre, 16:05:18 - 2015 da Mulan »
"What's the point in being grown up if you can't be childish sometimes?" (Doctor Who)

Offline mrclick

  • Studente di Dottorato
  • ***
  • Post: 189
  • FeedBack: +15/-7
    • Mostra profilo
    • GitHub
Re:Testi d'esame
« Risposta #1 il: Dom 11 Ottobre, 00:57:09 - 2015 »
Soluzione 16 Febbraio 2014 [COMPITO A]
Codice: [Seleziona]
# A_Ex1(s) (6 punti) Scrivere una funzione che riceve in ingresso una stringa s e calcoli la lunghezza della più lunga sequenza di caratteri
# successivi in ordine (strettamente) crescente. Ad esempio se la s vale 'acdfeca' allora la funzione deve restituire 4,
# poiché la sequenza 'acdf' in s è di lunghezza 4 ed è la più lunga ordinata in modo (strettamente) crescente.

def func(s):
    x = 1
    y = 0
    for i in range(len(s) - 1):
        x = x + 1 if ord(s[i]) < ord(s[i + 1]) else 0
        y = max(max_seq, x)
    return y
   
# A_Ex2(l1,l2) (6 punti) Scrivere una funzione che riceve in ingresso due liste l1 e l2 di numeri interi e calcoli il numero di volte che la somma
# di due numeri consecutivi di l1 sia esattamente uguale alla somma dei 2 numeri di l2 nelle stesse posizioni. Ad esempio,
# se l1 vale [5, 7, 9, 3, 11] e l2 vale [3, 9, 5, 7] la funzione deve restituire 2 in quanto sia nella posizione 0 (5+7 = 3 + 9)
# che nella posizione 2 (9 + 3 = 5 + 7) vale il fatto che la somma di due numeri consecutivi di l1 sia esattamente uguale alla
# somma dei 2 numeri di l2 nelle stesse posizioni. Attenzione che le 2 liste possono essere di lunghezza diversa e che non potete
# sommare elementi che siano fuori dal range di una delle liste.

def func(l1, l2):
    x = 0
    for i in range(min(len(l1) - 1, len(l2) - 1)):
        if l1[i] + l1[i + 1] == l2[i] + l2[i + 1]:
            x += 1
    return x
   
# A_Ex3(file) (9 punti) Scrivere una funzione che prende in ingresso un file contenente il resoconto di un torneo di poker.
# La prima riga del file ha il formato: importoIniziale;nome1;nome2;.....;nomen in cui si specifica l’importo iniziale (uguale per
# tutti i giocatori) e poi il nome di tutti i giocatori. Le righe successive contengono il resoconto delle varie partite, specificando
# in ognuna quanto ogni giocatore ha vinto e perso nel seguente formato: variazione1;variazione2;.........;variazionen
# dove la variazione può essere positiva o negativa. Quando un giocatore dopo una partita rimane con 0 viene eliminato dal gioco e viene
# messo nella lista degli eliminati e in tutte le partite successive la sua variazione sarà sempre 0. Leggere il file e costruire e restituire
# la lista ordinata (in ordine di eliminazione, assumendo per semplicità che in ogni partita venga eliminato al massimo un giocatore) dei giocatori
# eliminati. Ad esempio se il file contiene
#
#     1000;Paolo;Marco;Anna;Giorgio
#     -100;+100;-1000;+1000
#     -500;+700;0;-200
#     -400;+1000;0;-600
#     0;+1200;0;-1200
#     
# la funzione deve restituire: ['Anna', 'Paolo', 'Giorgio'] poiché Anna viene eliminata nella prima sessione, Paolo nella terza e Giorgio nella quarta.

def func(filepath):
    # la funzione supporta anche l'eliminazione di piu giocatori nella stessa mano (list.extend + list comprehension)
    with open(filepath) as f:
        lines = f.read().split('\n')
    eliminati = []
    giocatori = lines[0].split(';')[1:]
    chipcount = [int(lines[0][0]) for i in range(len(giocatori))]
    for line in lines[1:]:
        diff = line.split(';')
        chipcount = [chipcount[i] + int(diff[i]) for i in range(len)]
        eliminati.extend([giocatori[i] for i in chipcount if not chipcount[i]])
    return eliminati
   
   
# A_Ex4(fileV, fileA) (9 punti) Scrivere una funzione che prende in ingresso due files fileV e fileA, dove fileV contiene un insieme di offerte di vendita
# di oggetti nel seguente formato: NomeVenditore;NomeOggetto;PrezzoVendita . Si assuma che per ogni oggetto esiste al massimo un’offerta di vendita, cioè
# non ci sono mai 2 venditori che vendono lo stesso oggetto. Il file fileA contiene un insieme di offerte di acquisto di oggetti nel seguente formato:
#     
#     NomeAcquirente;NomeOggetto;PrezzoMaxAcquisto
#
# Si assuma che per ogni oggetto esiste al massimo un’offerta di acquisto, cioè non ci sono mai 2 acquirenti che vogliono comprare lo stesso oggetto.
# Se per un oggetto esiste un’offerta di vendita ed una di acquisto ed il prezzo di vendita è minore od uguale al prezzo massimo di acquisto allora
# l’oggetto viene venduto dal venditore all’acquirente. Se invece per un oggetto in vendita non esiste alcuna offerta di acquisto oppure se il prezzo
# di vendita è maggiore di quello massimo di acquisto allora si assume che NON venga venduto. Dovete costruire un dizionario con chiave il NomeOggetto
# e per valore una lista di 3 informazioni, cioè
#
#     [NomeVenditore, NomeAcquirente, PrezzoVendita]
#
# Dove il NomeVenditore è il nome del venditore, NomeAcquirente il nome dell’acquirente (se l’oggetto NON viene venduto il NomeAcquirente deve essere
# la stringa vuota ‘’) e PrezzoVendita è il prezzo di vendita.
#
# Ad esempio se il fileV contiene
#     
#     Paolo;PC;100
#     Anna;TV;30
#     Mario;Iphone;120
#
# E fileA contiene:
#
#     Giorgio;PC;80
#     Maria;TV;40
#     Luigi;Iphone;120
#     Mario;Phon;10
#     
# la funzione deve restituire:
#
# {'TV': ['Anna', 'Maria', 30], 'Iphone': ['Mario', 'Luigi', 120], 'PC': ['Paolo', '', 100]}

def func(fileV, fileA):
    with open(fileV) as f:
        dataV = f.read().split('\n')
        dictV = {dataV[1]: (dataV[0], dataV[2])}
    with open(fileA) as f:
        dataA = f.read().split('\n')
        dictA = {dataA[1]: (dataA[0], dataA[2])}
    return {k: [dictV[k][0], dictA[k][0] if int(dictA[k][2] >= dictV[k][2]) else '', int(dictV[k][2])] for k in dictV if k in dictA}   

nel caso servisse a qualcuno  :sisi: :sisi: :sisi: