Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
GROUP BY CF ) X
Query 5
SELECT *
FROM Forniture, ( SELECT COUNT(*)
FROM Fatture) X 12
Esame Informatica Generale 06/07/2017 – Fila B
Quesito 1 (punteggio 2)
Si considerino le seguenti dichiarazioni di variabili e la seguente istruzione di assegnamento:
double x[10];
int y;
y = compra(&x[1], x[9], x); /* versione puntatori */
y = compra (x[1], x[9], x) /* versione riferimenti */
elabora. riferimenti
definite il prototipo (intestazione) della funzione Nella versione la funzione
x[1].
dovrà modificare la variabile
Int compra (double *, double, double []);
Quesito 2 (punteggio 2)
Descrivere la funzione del gestore dei file di un sistema operativo.
Quesito 3 (punteggio 2)
Scegliere uno dei seguenti algoritmi codificati in linguaggio C/C++ e scrivere la tabella di esecuzione (trace
table): Puntatori Riferimenti
int g(int x, double* y) int g(int x, double& y)
{ {
x = x + 1; x = x + 1;
*y = *y + x; y = y + x;
return x - 2; return x - 2;
} }
int main() int main()
{ { 13
double x; double x;
int y; int y;
y = 1; y = 1;
x = 2.4; x = 2.4;
while (x > 0) while (x > 0)
{ {
y = g(y, &x); y = g(y, x);
x = x - 3; x = x - 3;
} }
return 0; return 0;
} }
Main
X Y
- -
- 1
2.4 1 G(1, &x)
2.4 1 X Y
2.4 1 1 &x
2.4 1 2 &x
4.4 1 2 &x
0
1.4 0 G(0,&x)
1.4 0 X Y
1.4 0 0 &x
1.4 0 1 &x 14
2.4 0 1 &x
-1
2.4 -1
-0.6 -1
Quesito 4 (punteggio 2)
Dati i seguenti schemi di relazione con le rispettive istanze:
Aziende(PIVA,Denominazione)
PIVA Denominazione
111 Pirelli
222 Zucchetti
Consulenti(PIVA,CF, dataAss, Ret)
PIVA CF dataAss Ret
111 AAAAAA 22-11-2009 1000
222 AAAAAA 22-11-2009 2000
222 BBBBBB 28-10-2009 5000
111 CCCCCC 30-12-2007 1000
222 CCCCCC 30-12-2007 2000
stabilire il risultato della seguente query scrivendo le tabelle intermedie:
SELECT C.CF, T.M, COUNT(*)
FROM Consulenti C, (SELECT AVG(Ret) AS M FROM Consulenti GROUP BY PIVA) T
GROUP BY C.CF, T.M
HAVING SUM(Ret) > T.M 15
TABELLA T
M
1000
4500
TABELLA C X T
PIVA CF dataAss Ret M
111 AAAAAA 22-11-2009 1000 1000
222 AAAAAA 22-11-2009 2000 1000
222 BBBBBB 28-10-2009 5000 1000
111 CCCCCC 30-12-2007 1000 1000
222 CCCCCC 30-12-2007 2000 1000
111 AAAAAA 22-11-2009 1000 4500
222 AAAAAA 22-11-2009 2000 4500
222 BBBBBB 28-10-2009 5000 4500
111 CCCCCC 30-12-2007 1000 4500
222 CCCCCC 30-12-2007 2000 4500
TABELLA FINALE
C.CF T.M COUNT(*)
AAAAAA 1000 2
BBBBBB 1000 1
BBBBBB 4500 1
CCCCCC 1000 2 16
Esercizio 1 (9 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
check3
3. definisce la funzione con parametri:
int;
a di tipo vettore di 100
int.
b di tipo puntarore/riferimento ad una variabile di tipo
La funzione deve scrivere nell'area di memoria puntata/riferita da b il valore 1 se nel vettore a sono
presenti 3 valori diversi tra loro; in caso contrario la funzione deve scrivere nell'area di memoria
puntata/riferita da b il valore -1.
main
4. nella funzione x
IV. dichiarare un vettore di nome contenente 100 numeri interi;
V. ripetere le seguenti operazioni fino a quando due esecuzioni separate della funzione
check3 restituiscono i valori 1 e -1: x,
a. inserire 100 valori letti da standard input nel vettore
check3 x
b. eseguire la funzione applicata al vettore scrivendo il risultato nella
variabile t. 17
#include <stdio.h>
#include <stdlib.h>
void check3(int a[100], int *b){
*b=-1;
int i,j;
int conta=0;
for(i=0;i<100;i++){
for(j=0;j<100;j++){
if(a[i]!=a[j]) conta++;
}
}
if (conta>=3) *b=1;
}
int main(){
int x[100];
int i;
int t;
int conta1=0;
int contameno=0;
do{ for(i=0;i<100;i++) scanf("%d", &x[i]); 18
check3(x, &t);
if (t=1) conta1++;
else contameno++;
}while( conta1<1 && contameno<1);
system("PAUSE");
return 0;
}
Esercizio 2 (4 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce un vettore di nome a contenente 1000 numeri interi;
2. modifica il vettore a inserendo in ogni sua posizione un valore letto da standard input;
3. successivamente al punto due, modifica il vettore a diminuendo ogni suo valore per il valore
massimo presente nel vettore a.
#include <stdio.h>
#include <stdlib.h>
int main(){
int a[1000];
int i;
int max;
for(i=0;i<1000;i++) scanf("%d", &a[i]);
max=a[1]; 19
for(i=0;i<1000;i++){
if(a[i]>max) max=a[i];
}
for(i=0;i<1000;i++) a[i]=a[i]-max;
system("PAUSE");
return 0;
}
Esercizio 3 (8 punti)
Il sistema informatico dell'azienda che gestisce i Telepass utilizza un database per gestire il transito dai
caselli. Nel database sono presenti le seguenti relazioni:
Apparati (ID, CF, Indirizzo)
Transito(CodiceTelepass, CodiceCasello, Data, Velocità)
Apparati ID Transito
dove nella relazione l'attributo è la chiave primaria. Nella relazione gli attributi
CodiceTelepass, CodiceCasello Data
e formano la chiave primaria e l'attributo
CodiceTelepass Transito. Transito
è chiave esterna per la relazione Ogni tupla della relazione
Velocità
elenca i passaggi dai caselli autostradali; in ogni tupla l'attributo rappresenta la velocità con cui
il veicolo è transitato dal casello.
data la seguente interrogazione SQL spiegare l’errore logico in essa contenuto (la query ha
1. sicuramente un errore):
SELECT *
FROM Apparati
WHERE ID IN (SELECT CodiceTelepass, Data FROM Transito)
2. scrivere l'istruzione SQL che visualizza, per gli utenti che hanno transitato almeno una volta in un
casello, il codice fiscale (CF) e la massima velocità a cui hanno transitato;
3. scrivere l'istruzione SQL che visualizza per ogni casello il numero totale di passaggi nel 2016;
4. scrivere l'istruzione SQL che visualizza i caselli che hanno registrato il maggiore numero di transiti
nel 2016;
5. scrivere l'istruzione SQL che traduce la seguente espressione dell’algebra relazionale: prodotto
Apparati
cartesiano fra la tabella e quella che si ottiene attraverso un'operazione di proiezione
MIN(Data) Transito.
dell'operatore dalla relazione 20
Query 1
Nella query interna dovrebbe essere estratto solo CodiceTelepass e non anche la data che non è
confrontabile con l’ID.
La versione corretta sarebbe:
SELECT *
FROM Apparati
WHERE ID IN (SELECT CodiceTelepass FROM Transito)
Query 2
SELECT CF, MAX(Velocità)
FROM Apparati, Transito
WHERE ID = CodiceTelepass
GROUP BY CF
Query 3
SELECT CodiceCasello, COUNT(*)
FROM Transito
WHERE Data BETWEEN ‘01/01/2016’ AND ‘31/12/2013’
GROUP BY CodiceCasello
Query 4
SELECT CodiceCasello
FROM Transito
WHERE Data BETWEEN ‘01/01/2016’ AND ‘31/12/2013’
GROUP BY CodiceCasello
HAVING COUNT(*)>= (SELECT MAX(Conteggio)
FROM (SELECT COUNT(*) AS Conteggio
FROM Transito
GROUP BY CodiceCasello) A ) B 21
Query 5
SELECT *
FROM Apparati, (SELECT MIN(Data)
FROM Transito) X 22
Esame Informatica Generale 15/06/2017 – Fila A
Quesito 1 (punteggio 2)
Si consideri il seguente frammento di programma in linguaggio C:
while (i <= j) {
i = i + a;
j = j / 2;
} do-while,
utilizzando il ciclo scrivere un frammento di programma equivalente.
Do{ I=i+a;
j=/2;
}while(i<=j);
Quesito 2 (punteggio 2)
Descrivere la funzione della memoria centrale. 23
Quesito 3 (punteggio 2)
Scegliere uno dei seguenti algoritmi codificati in linguaggio C/C++ e scrivere la tabella di esecuzione (trace
table) Puntatori Riferimenti
int f(int* y) { int f(int& y) {
*y = *y + 1; y = y + 1;
return *y + 1; return y + 1;
} }
int G(int* y) { int G(int& y) {
int x; int x;
x = 1 + f(y); x = 1 + f(y);
*y = *y + 1; y = y + 1;
return *y + x; return y + x;
} }
int main() { int main() {
int x, y; int x, y;
x = 0; x = 0;
y = G(&x) - 1; y = G(x) - 1;
return 0; return 0;
} } 24
Main
X Y
- -
0 - G(&x)
0 - Y X
0 - &x - F(&x)
0 - &x - Y
0 - &x - &x
1 - &x - &x 2
1 - &x 3
2 - &x 3
5
2 4 25
Quesito 4 (punteggio 2)
Dati i seguenti schemi di relazione con le rispettive istanze:
Aziende(PIVA, Denominazione)
PIVA Denominazione
111 Pirelli
222 Zucchetti
Consulenti(PIVA,CF, dataAss, Ret)
PIVA CF dataAss Ret
111 AAAAAA 22-11-2009 1000
222 AAAAAA 28-10-2009 2500
222 BBBBBB 22-11-2009 5000
111 CCCCCC 30-12-2007 1000
222 CCCCCC 28-10-2009 2500
scrivere il risultato della seguente query scrivendo tutte le tabelle intermedie:
SELECT B.K, COUNT(*), SUM(B.K)
FROM ( SELECT Ret, COUNT(DISTINCT dataASS) AS K
FROM Consulenti
GROUP BY PIVA, Ret
) A,
( SELECT PIVA, COUNT(*) AS K
FROM Consulenti
GROUP BY PIVA, Ret
) B
WHERE B.K <> A.K
GROUP BY B.K 26
TABELLA A
Ret K
1000 2
2500 1
5000 1
TABELLA B
PIVA K
111 2
222 2
222 1
TABELLA A X B
Ret A.K PIVA B.K
1000 2 111 2
2500 1 111 2
5000 1 111 2
1000 2 222 2
2500 1 222 2
5000 1 222 2
1000 2 222 1
2500 1 222 1
5000 1 222 1 27
TABELLA FINALE
B.K COUNT(*) SUM(B.K)
2 4 8
1 1 1
Esercizio 1 (9 punti)
Scrivere un algoritmo codificato in linguaggio C/C++ che:
Maggiori
5. definisce la funzione con parametri:
a int;
di tipo vettore di 500
b int;
di tipo vettore di 500
d int.
di tipo puntatore/riferimento ad un d
Scrivere nell’area di memoria puntata/riferita da la posizione di un qualsiasi elemento del
a b.
vettore maggiore di ogni elemento del vettore Se tale elemento non esiste, la funzione deve
d
scrivere nell’area di memoria puntata riferita da il numero
-1. main
6. nella funzione x e z int.
VI. dichiara due vettori di 500
t int;
VII. dichiara una variabile di tipo x
VIII. inserisce in tutte le posizioni del vettore dei numeri interi letti da standard input.
IX. ripete le seguenti istruzioni che devono terminare quando l’esecuzione della funzione
Maggiori () t
inserisce nella variabile il valore -1: z
a. inserisce in tutte le posizioni del vettore dei numeri interi letti da standard
input. Maggiori () x z
b. eseguire la f