Table of Contents

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 n<m**(k+1) :
			return k, x
		k+=1
 
# Parte 2 
def lg2(m,n):
	assert(m>1 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<next :
			return k, x
		old=next
		k+=1