Sei sulla pagina 1di 2

SISTEMI INFORMATICI 2014–15 – Appello del 12 gennaio 2015


Test e soluzioni
Esercizio 1 – Ruby array (3 punti)
Descrivere con precisione l’output della seguente riga di programma dopo aver sostituito all’interno delle
virgolette la stringa ‘matricola’ con il suo numero di matricola effettivo. Descrivere inoltre l’azione svolta dai
singoli metodi.
p "matricola".split(//).map {|k| k.to_i}.sort - [1,2,4,8]

“1562541397" => [3, 5, 5, 6, 7, 9]


–––
Dal manuale:
split(pattern=$;, [limit]) ! anArray click to toggle source

If pattern is a Regexp, str is divided where the pattern matches. Whenever the pattern matches a zero-length string,
str is split into individual characters. If pattern contains groups, the respective matches will be returned in the
array as well.

Esercizio 2 – Ruby hash (3 punti)


Descrivere con precisione l’output della seguente riga di programma:
p h = {a:10, b:20, c:30, d:40, e:50}.delete_if { |k,v| k > :d or v > 30 }

{:a=>10, :b=>20, :c=>30}

Esercizio 3 – Ruby inject (3 punti)


Descrivere con precisione l’output della seguente riga di programma considerando che la variabile h sia stata
definita nell’esercizio 2.
puts h.values.inject { |t,v| t += v }

60

Esercizio 4 - Ruby (5 punti)


Scrivere in Ruby un programma che converta un elenco di date dal formato aaaammgg al formato gg-mm-aaaa usando
l’iteratore DATA.each do |item| block end
Dati in input:
20141102
20141213
20150112
20150202
20141022
Output:
02-11-2014
13-12-2014
12-01-2015
02-02-2015
22-10-2014
DATA.each do |r|
r.chomp.match /(\d{4})(\d{2})(\d{2})/
puts "#{$3}-#{$2}-#{$1}"
end

Esercizio 5 – SQL SELECT (3 punti)


Anche se la sintassi di questo comando sia alquanto ricca e strutturata e si arricchisca di ulteriori clausole e
funzionalità nelle varie implementazioni del linguaggio, SELECT prevede sette clausole di cui una sola obbligatoria.
Elencare le sette clausole e per ciascuna, descriverne sommariamente la funzione svolta.

SELECT [ ALL | DISTINCT ]


[ INTO nuova_tabella ]
FROM tabella_origine [ , . . . ]
[ JOIN condizione_join ]
[ WHERE condizione_selezione ]
[ GROUP BY espressione_di_raggruppamento ]
[ HAVING condizione_di_ricerca ]
[ ORDER BY criterio_di_ordinamento [ ASC | DESC ] ]
Esercizio 6 – SQL Babynames (5 punti)
Con riferimento al database “Baby Names” scrivere usando SQL la query per visualizzare i cinque nomi con la
frequenza totale più alta. Di seguito il risultato della query:
name sex ftot
---------- ---------- ----------
James M 5114325
John M 5095590
Robert M 4809858
Michael M 4315029
Mary F 4127615
SELECT name, sex, SUM(freq) AS ftot FROM names GROUP BY name ORDER BY ftot DESC LIMIT 5;

Esercizio 7 – Archivi sequenziali vs archivi random (3 punti)


Descrivere le differenze principali tra gli archivi ad accesso sequenziale e quelli ad accesso diretto o random.

Il metodo di accesso sequenziale consente di accedere a un record solo dopo aver fatto accesso a tutti i record che
lo precedono. In questo caso, il tempo di accesso al record è proporzionale alla posizione del record, ossia varia
in base al numero di record che devono essere letti prima di accedere al record che si vuole trovare. È l'accesso
tipico per i file memorizzati su supporti sequenziali come nastri magnetici. Ciò significa che in un archivio
implementato su nastro i dati potranno essere consultati nello stesso ordine con cui sono stati inseriti. È in
questo caso evidente la coincidenza tra organizzazione logica e organizzazione fisica.

Il metodo di accesso diretto o casuale consente di posizionarsi direttamente sul record interessato in un tempo che
non dipende dalla posizione che esso occupa nell'archivio.