====== Voti e soluzioni del 3/9 ====== Salve a tutti, dovrebbero esservi gia' arrivati i voti dell'ultimo appello. Trattandosi di un tema d'esame piuttosto semplice, i voti sono abbastanza alti. Se non avete passato l'esame, dovreste riconsiderare seriamente la preparazione che avete fatto. Per quanto riguarda le soluzioni, metto qui una soluzione degli esercizi di programmazione. Potete usare l'implementazione dei BTree fornita a lezione per verificare le soluzioni dell'esercizio relativo, e provare voi stessi il secondo esercizio. ==== Esercizio 1 ==== #!/usr/bin/python from threading import Thread, currentThread from Queue import Queue levels = [ 'ERROR', 'WARNING', 'DEBUG', 'INFO', 'SHUTDOWN' ] class LogBuffer(Queue,Thread): def __init__(self, filename): Queue.__init__(self) Thread.__init__(self) self.file = open(filename, 'w') def run(self): while 1 : tid, level, msg = self.get() self.file.write(tid.getName()+': '+levels[level]+': '+msg+'\n') if level == 4 : self.file.close() break class Logger(object): def __init__(self,logbuf): self.logbuf = logbuf def log(self,msg,lvl): tpl = currentThread(),lvl,msg self.logbuf.put(tpl) # Test del sistema di logging if __name__ == '__main__' : lbuf = LogBuffer("test.log") lbuf.start() def user1(): l = Logger(lbuf) for i in range(10): l.log("test1",i%4) def user2(): l = Logger(lbuf) for i in range(10): l.log("test2",i%4) l.log("closing down",4) Thread(target=user1).start() Thread(target=user2).start() ==== Esercizio 4 ==== #!/usr/bin/python # Parte 1 (x serve a verificare quante operazioni si stanno eseguendo) def lg1(m,n): assert(m>1 and n>1) assert(type(m)==int and type(n)==int) x=0 k=0 while 1: x+=k if m**k<=n and n1 and n>1) assert(type(m)==int and type(n)==int) x=0 k=0 old=1 while 1: x+=1 next=old*m if old<=n and n