Ing Gestionale mercoledi’ 11/07/2012 FONDAMENTI -INFO Esame Finale(9 crediti) Prof. M. Angelaccio 90 minuti Istruzioni. 1. Rispondere a tutte le domande scrivendo negli spazi indicati usando eventualmente il retro del foglio previa indicazione 2. Scrivere chiaramente e in modo sintetico i passaggi intermedi ove necessario, si preferiscono risposte schematiche ma complete. 3. NON usare penna rossa 4. NON consultare appunti o libri, e NON comunicare 5. la durata è di 90 min. (45 minuti per ciascuna parte) 6. il candidato ha tempo 5 minuti per decidere di non consegnare e ritornare (automaticamente) al secondo appello di luglio 7. i risultati e le modalità di verbalizzazione verranno pubblicate su internet ai siti di didattica di ateneo (http://www.uniroma2.it/didattica/FondamentiInfo/deposito/) e del corso (http://dist.info.unir 8. i gravemente insufficienti (< 10/30) devono ripetere l’esame a Settembre. FondamentiInformatica-11/07/2012 Cognome : Nome: Mat: I [5 min.] Quali sono i ruoli di un Sistema Operativo ? (max 10 parole) .................................................................................................................................................. II [5 min.] Qual’è il minimo numero intero rappresentabile in modulo e segno con un byte ? Risposta: 0 -8 -127 -7 -255 E perchè ? ............................................................................................ III [8 min.] Sia a l’array ordinato dei numeri di due cifre diverse e formati combinando le cifre 1,2 e 3. Definizione a = ............................ Cosa stampa a[a[1]- a[0]]? ....................... IV [12 min.] Visualizzare la settimana in corso nel formato "DDD" n (vedi Test). weekCalendar.rb (da completare): Test: week = ["LUN", "MAR", "MER", "GIO", "VEN", "SAB", "DOM"] > > > > > > > > ruby weekCalendar.rb LUN 9 MAR 10 MER 11 GIO 12 VEN 13 SAB 14 DOM 15 for ............................................. puts ........................... end 1. Quale valore di i in week[i] corrisponde al mercoledi’ ? 3 MER ME 2 4 2. Cosa restituisce week.sort ? Risposta: .................................................................................................................................................. V [15 min.] Una persona è composta da nome e cognome, e uno studente è una persona con matricola (numero intero). Ad ogni studente è associato libretto dato da una lista di voti. Definire le due classi con i metodi accessori per i dati anagrafici e il libretto ed un metodo insertVoto specifico per studente. Applicare a due variabili completando l’esempio d’uso. # uso di Persona e Studente # Definizione di Persona class Persona #creazione di una persona -> Mario, Rossi p= ............... #Creazione di studente Mario, Rossi con matricola 1200 end # Definizione di Studente class Studente s= ......................... #inserimento di 30 e 18 nel libretto di Mario Rossi puts ..............#stampa del libretto di Mario Rossi end FondamentiInformatica-11/07/2012 Cognome : Nome: Mat: I [5 min.] Quali sono le 6 fasi del ciclo di esecuzione del Sistema Calcolatore ? 1...................2..........................3..........................4.............................5........................6................. II [5 min.] Qual’è il minimo numero intero rappresentabile in modulo e segno con 12 bit ? Risposta: 0 -11 -2047 -12 -4095 E perchè ? ............................................................................................ III [8 min.] Sia pari l’array dei numeri pari formati da una sola cifra decimale. Definizione pari = ................... Cosa stampa puts (pari.to s).to i ? ....................... IV [12 min.] L’IRPEF viene calcolata con il seguente metodo (basato su 5 aliquote): da da da da da 0 a 15.000 euro: 23% di aliquota IRPEF 2012 15.001 a 28.000 euro: 3.450 euro + 27% dell’eccedente della prima aliquota 28.001 a 55.000 euro: 6.960 euro + 38% dell’eccedente della seconda aliquota 55.001 a 75.000 euro: 17.220 euro + 41% dell’eccedente della terza aliquota 75.001 a salire: 25.420 euro + 43% dell’eccedente della quarta aliquota 1. Quale tra le seguenti espressioni verifica se una variabile importo appartiene alla seconda aliquota ? (15001..28000).include?importo importo in (15001..28000) if (importo > 15000) 2. Scrivere un programma calcolaAliquota.rb che calcola l’Aliquota di un importo (vedi Test). Test: > ruby calcolaAliquota.rb calcolaAliquota.rb(da Completare): aliquote = [.....................................................................] importo = ........................... #lettura importo > input: importo: 18500 > ALIQUOTA= 2, > input: importo: 30000 > ALIQUOTA = 3, puts "input: importo:.................................." #calcolo aliquota di importo con scansione da aliquote ..................................................... ..................................................... puts "ALIQUOTA = ......................." V [15 min.] Usare la classe Point con ascissa e ordinata (x e y) per definire come sua sottoclasse oggetti di tipo Circle in cui x e y sono le coordinate del centro e r il valore del raggio. Scrivere i metodi accessori e il metodo circonferenza per Circle (usare la costante Math.PI).Applicare a due variabili completando l’esempio d’uso. # uso di Point e Circle # Definizione di Point class # creazione di un punto di coordinate unitarie p = ................ # creazione di un cerchio di centro end # Definizione di Circle class p e raggio 1/2 c = ................ # stampa lunghezza circonferenza di c ............................ # stampa area di c end puts ................. #(perchè non è Math.PI*r**2?..........................) FondamentiInformatica-11/07/2012 Cognome : Nome: Mat: I [5 min.] Che cosa calcola il seguente programma in linguaggio macchina composto da 7 istruzioni memorizzate nelle locazioni (0..6)? LOA 7 ADD 8 STO 10 LOA 9 ADD 10 STO 11 STP 0 Risposta: Calcola la somma dei numeri ......................................................................................................... II [5 min.] Qual’è il minimo numero intero rappresentabile in modulo e segno con 10 bit ? 0 -9 -511 -10 -1023 E perchè ? ............................................................................................ III [8 min.] Sia a l’array ordinato dei numeri di due cifre diverse e formati combinando le cifre 2,3 e 4. Definizione a = ............................ Cosa stampa a[a[1]- a[0]]? ....................... IV [12 min.] Il coefficiente di correlazione rs di Spearman misura la correlazione tra scale di valori (ranghi). La formula è espressa a sinistra come funzione della somma delle differenze tra tutte le coppie di ranghi. Completare a destra la definizione di funzione che calcola rs per una coppia di ranghi. # definizione di funzione (da completare) def f(a,b) coeff=0 for i in (1..n) temp[i]= (a[i]-b[i])**2/(n*(n**2-1)) end rs = 1 − 6 n X (xi − yi )2 1 n(n2 − 1) coeff=1-6*sum(temp) Ad esempio per x = (1, . . . , 10) return coeff end # test di esempio (da completare) y = (6, 2, 3, 4, 5, 7, 9, 8, 1, 10]) → rs = 0, 4303 x = ...................... y = [6,2,3,4,5,7,9,8,1,10] puts f(x,y) # ---> 0.4303 V [15 min.] Una persona è composta da nome e cognome, e uno conto nominativo è una persona con nunmero di conto numconto (numero intero). Ad ogni conto nominativo è associato saldo dato da una variabile di saldo su cui sono effettuate le operazioni di prelievo e deposito. Definire le due classi con i metodi accessori per i dati anagrafici e il saldo. Applicare a due variabili completando l’esempio d’uso. #creazione di una persona -> Mario, Rossi # Definizione di Persona class Persona p= ............... #Creazione di conto con numero 3333 e anagrafica di p end # Definizione di conto nominativo class Conto c= ......................... # depositi di 1000 e 500 e prelievo di 200 end puts .................#stampa saldo di Mario Rossi FondamentiInformatica-11/07/2012 Cognome : Nome: Mat: VI[5 min.]Quali sono le Applicazioni e i dati scambiati nel protocollo di comunicazione HTTP? Risposta: Applicazioni .................................................................................................................. Risposta: Dati scambiati ................................................................................................................ VII [5 min.] A cosa serve il tag FORM in HTML ? Formattare il paragrafo Inserire una Formula Comunicare dati a server-script Comunicare dati al browser VII [10 min.] Completare la definizione di client e server TCP per l’esempio di comunicazione Client-Server in localhost della lettura dell’orologio del server, specificando le parti che realizzano le operazioni di apertura e chiusura sessione e usando l’indirizzo locale e il numero di porta 12345. require "socket" require "socket" server = ................ while session = server.accept client= ................... msg = .................. while msg= client.gets ............... puts msg end .............. client.close end IX [20 min.] Completare HTML mancante nella pagina di sistema solare seguente e rispondere alle domande. Completare Completare (max 12 parole per ciascuna domanda) <html> <body> <b>Il Sistema Solare</b> <p> <hr WIDTH="100%"> <br><a NAME="menu"></a><b>Indice</b> 1) Cosa significa #terra ? ...................................................... <ul> <li><a href="#terra">La terra</a></li> <li><a href="#luna">La luna</a></li> <li><a href="#marte">Marte</a></li> </ul> <hr WIDTH="100%"> <br><a NAME="terra"></a><b>La terra</b> <a href="terra.jpg"> <img SRC="terra.jpg" height=150 width=150 ></a> (<b>Nota: </b>si puo’ cliccare sull’immagine per andare alla figura con le dimensioni originali) <p> <a href=".......">Torna al menu principale</a> <br><a NAME="......."></a><b>La luna</b> <br><b>....</b> <p><a href="lunar.jpg"> <img SRC="lunar.jpg" height=144 width=101></a> <p><img SRC="top_arrow.gif" height=16 width=16> <a href=".......">Torna al menu principale</a> <p><a NAME="......."></a><b>Marte</b> <br>... <p><a href="marte.jpg"> <img SRC="marte.jpg" height=70 width=99></a> <br> <p> <a href=".......">Torna al menu principale</a> <p> <hr WIDTH="100%"> </body> </html> 2) Cosa significa <hr WIDTH="100%"> ? ...................................................... 3) Quante e quali voci ha il menu indice ? ...................................................... Qual’è la differenza tra <a NAME= "terra" > e <a href="terra.jpg"> ? ...................................................... FondamentiInformatica-11/07/2012 Cognome: SOLUZIONE.... Nome: Mat: I [5 min.] Quali sono i ruoli di un Sistema Operativo ? (max 10 parole) Risposta: ..Interfaccia Utente e Gestore di Risorse..................................................................................................... II [5 min.] Qual’è il minimo numero intero rappresentabile in modulo e segno con un byte ? 0 -8 -127 -7 -255 E perchè ? ....127 = 27 − 1 ............... III [8 min.] Sia a l’array ordinato dei numeri di due cifre diverse e formati combinando le cifre 1,2 e 3. Definizione a = ..[12,13,23,21,31,32].. Cosa stampa a[a[1]- a[0]] ? ...13... IV [12 min.] Visualizzare la settimana in corso nel formato "DDD" n (vedi Test). Test: > > > > > > > > ruby weekCalendar.rb LUN 9 MAR 10 MER 11 GIO 12 VEN 13 SAB 14 DOM 15 weekCalendar.rb (da completare): week = ["LUN", "MAR", "MER", "GIO", "VEN", "SAB", "DOM"] g = 9 for i in (0..6) puts week[i] +" "+ (g+i).to_s end Quale valore di i in week[i] corrisponde al mercoledi’ ? 3 MER ME Cosa restituisce week.sort ? 2 4 Risposta: .......["DOM", "GIO", "LUN", "MAR", "MER", "SAB", "VEN"]......................................................... V [15 min.] Una persona è composta da nome e cognome e uno studente è una persona con matricola (numero intero). Ad ogni studente è associato libretto dato da una lista di voti. Definire le due classi con i metodi accessori per i dati anagrafici e il libretto ed un metodo insertVoto specifico per studente. Applicare a due variabili completando l’esempio d’uso. # Definizione di Persona class Persona def initialize(nome, cognome) @nome = nome @cognome = cognome end attr_reader :nome, :cognome attr_writer :nome, :cognome # uso di Persona e Studente end # Definizione di Studente class Studente < Persona def initialize(nome, cognome, matricola) super(nome, cognome) @matricola = matricola @voti = [] end attr_reader :matricola attr_writer :matricola attr_reader :libretto def insertVoto (v) @libretto << v end end #creazione di una persona -> Mario, Rossi p= Persona.new("Mario","Rossi") #idem per studente s= Studente.new("Mario","Rossi", 1200) #inserimento di voto per s voto1 = 30 voto2 = 18 s.insertVoto(voto1) s.insertVoto(voto2) puts s.libretto FondamentiInformatica-11/07/2012 Cognome : ..SOLUZIONE... Nome: Mat: I [5 min.] Quali sono le 6 fasi del ciclo di esecuzione del Sistema Calcolatore ? Risposta: 1.leggi PC.2.FETCH istruzione da Memoria..3..PC = PC+1..4.DECODE istruzione..5..EXECUTE istruzione..6.Ripeti da (1) o STOP.... II [5 min.] Qual’è il minimo numero intero rappresentabile in modulo e segno con 12 bit ? 0 -11 -2047 -12 -4095 E perchè ? .........2047 = 21 1 − 1 ..................................... III [8 min.] Sia pari l’array dei numeri pari formati da una sola cifra decimale. Definizione pari = [2,4,6,8] Cosa stampa puts (pari.to s).to i ? ..2468.. IV [12 min.] L’IRPEF viene calcolata con il seguente metodo (basato su 5 aliquote): da da da da da 0 a 15.000 euro: 23% di aliquota IRPEF 2012 15.001 a 28.000 euro: 3.450 euro + 27% dell’eccedente della prima aliquota 28.001 a 55.000 euro: 6.960 euro + 38% dell’eccedente della seconda aliquota 55.001 a 75.000 euro: 17.220 euro + 41% dell’eccedente della terza aliquota 75.001 a salire: 25.420 euro + 43% dell’eccedente della quarta aliquota 1. Quale tra le seguenti espressioni verifica se una variabile importo appartiene alla seconda aliquota ? (15001..28000).include?importo importo in (15001..28000) if (importo > 15000) 2. Scrivere un programma calcolaAliquota.rb che calcola l’Aliquota di un importo (vedi Test). calcolaAliquota.rb(da Completare): Test: > ruby calcolaAliquota.rb > input: importo: 18500 > ALIQUOTA= 2, > input: importo: 30000 > ALIQUOTA = 3, aliquote = [15000,28000,55000,78000] importo = gets.to_i aliquota = 0 #lettura importo puts "input: importo: #{importo}" # calcolo aliquota di importo con scansione da aliquote for i in (0..3) if importo <= aliquote[i] aliquota = i+1 break end aliquota = 5 end puts "ALIQUOTA = "+ aliquota.to_s V [15 min.] Usare la classe Point con ascissa e ordinata (x e y) per definire come sua sottoclasse oggetti di tipo Circle in cui x e y sono le coordinate del centro e r il valore del raggio. Scrivere i metodi accessori e il metodo circonferenza per Circle (usare la costante Math.PI).Applicare a due variabili completando l’esempio d’uso. # Definizione di Point class Point def initialize(x, y) @x = x @y = y end attr_reader :x, :y attr_writer :x, :y end # Definizione di Circle class Circle < Point def initialize(x, y, r) super(x, y) @r = r end attr_reader :r attr_writer :r def circonferenza () return 2*Math::PI*@r end end # creazione di un punto di coordinate unitarie p= Point.new(1,1) # creazione di un cerchio di centro c= Circle.new(p.x,p.y,0.5) # stampa p e raggio 1/2 lunghezza circonferenza di c puts c.circonferenza # stampa area di c puts (Math::PI)*c.r**2 #(perchè non è Math::PI*r**2? Occorre @r invece di r) FondamentiInformatica-11/07/2012 Cognome : SOLUZIONE Nome: Mat: I [5 min.] Che cosa calcola il seguente programma in linguaggio macchina composto da 7 istruzioni memorizzate nelle locazioni (0..6)? LOA 7 ADD 8 STO 10 LOA 9 ADD 10 STO 11 STP 0 Risposta: Calcola la somma dei numeri ..memorizzati nelle locazioni 7, 8 e 9 con risultato in 11... II [5 min.] Qual’è il minimo numero intero rappresentabile in modulo e segno con 10 bit ? 0 -9 -511 -10 -1023 E perchè ? ....511 = 29 − 1.... III [8 min.] Sia a l’array ordinato dei numeri di due cifre diverse e formati combinando le cifre 2,3 e 4. Definizione a = .[23,24,32,34,42,43] Cosa stampa a[a[1]- a[0]]? .24.. IV [12 min.] Il coefficiente di correlazione rs di Spearman misura la correlazione tra scale di valori (ranghi). La formula è espressa a sinistra come funzione della somma delle differenze tra tutte le coppie di ranghi. Completare a destra la definizione di funzione che calcola rs per una coppia di ranghi. # definizione di funzione (da completare) def f(a,b) coeff=0 rs = 1 − 6 n X (xi − yi )2 1 n(n2 − 1) for i in (1..n) temp[i]= (a[i]-b[i])**2/(n*(n**2-1)) coeff = coeff + temp[i] end coeff=1-6*coeff Ad esempio per x = (1, . . . , 10) return coeff end # test di esempio (da completare) y = (6, 2, 3, 4, 5, 7, 9, 8, 1, 10]) → rs = 0, 4303 x = (1..10) y = [6,2,3,4,5,7,9,8,1,10] puts f(x,y) # ---> 0.4303 V [15 min.] Una persona è composta da nome e cognome, e uno conto nominativo è una persona con nunmero di conto numconto (numero intero). Ad ogni conto nominativo è associato saldo dato da una variabile di saldo su cui sono effettuate le operazioni di prelievo e deposito. Definire le due classi con i metodi accessori per i dati anagrafici e il saldo. Applicare a due variabili completando l’esempio d’uso. # Definizione di Persona class Persona (vedi sopra) end # Definizione di conto nominativo class Conto < Persona def initialize(nome, cognome, numconto,saldo) super(nome, cognome) @numconto = numconto @saldo = saldo end attr_reader :numconto attr_reader :saldo def deposito (v) @saldo += v end def prelievo (v) if (@saldo > v) @saldo -= v end end end #creazione di una persona -> Mario, Rossi p= ............... #Creazione di conto con numero 3333 e anagrafica di p c= ......................... # depositi di 1000 e 500 e prelievo di 200 puts .................#stampa saldo di Mario Rossi