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
TABELLA A
K H
2 2000
3 9000
TABELLA B
PIVA Ret
111 1000
222 2000
TABELLA A X B
K H PIVA Ret
2 2000 111 1000
2 2000 222 2000
3 9000 111 1000
3 9000 222 2000
TABELLA FINALE
B.PIVA C S
111 2 11000
222 2 11000
15 di 49
Esercizio 1 (9 punti)
#include <stdio.h>
#include <stdlib.h>
int mescola(int a[50], int b[50], int c[50]){
int conta=0;
int i,j;
int k=0;
for(i=0;i<50;i++){
if(a[i]!=b[i] and k<50){
if(a[i]<b[i]){
c[k]=a[i];
k++;
c[k]=b[i];
}
k++;
}
}
return k;
}
int main()
{ int x[50];
int y[50];
int z[50];
int h;
int i;
do{
for(i=0;i<50;i++) scanf("%d", &x[i]);
for(i=0;i<50;i++) scanf("%d", &y[i]);
h=mescola(x,y,z)
}while (h!=0);
system("PAUSE");
return 0;
} 16 di 49
Esercizio 2 (4 punti)
#include <stdio.h>
#include <stdlib.h>
int main()
{ int x[100];
int i;
int j;
int temp;
for(i=0;i<100;i++) scanf("%d", &x[i]);
for(i=0;i<100;i++){
for(j=99;j>0;j--){
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
system("PAUSE");
return 0;
}
Esercizio 3 (7 punti)
QUERY 1
SELECT CODGita
FROM Gita, Socio
WHERE Socio.CF = Gita.CF AND Socio.CF IN (SELECT CF
FROM Socio
WHERE Eta <18) A
QUERY 2
SELECT Gita.CF, NumGite, COUNT(*) AS NonPagate
FROM Gita, (SELECT CF, COUNT(*) AS NumGite
FROM Gita
GROUP BY CF) A
WHERE A.CF = Gita.CF AND Quota=0
GROUP BY Gita.CF
QUERY 3
SELECT CF
FROM Gite
GROUP BY CF
HAVING COUNT(*)= (SELECT COUNT(*)
FROM Gita
WHERE Quota=0
GROUP BY CF) A 17 di 49
QUERY 4
SELECT *
FROM Socio, (SELECT *
FROM Gita
WHERE Quota>0) A 18 di 49
Esame Informatica Generale
04/07/2018 Fila A
Quesito 1 (punteggio 2)
Si considerino le seguenti istruzioni del linguaggio c/c++.
int x[100];
double y;
void fz(double[], int, double*); // puntatori
void fz(double[], int, double&); // riferimenti
Indicando a quale versione si fa riferimento (puntatori o riferimenti), indicare, giustificando la
risposta, gli errori della seguente espressione.
fz(x, x[y], x[3] + 1.6, y) + 5.6;
Quesito 2 (punteggio 2)
Descrivere la funzione della memoria centrale.
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* x, int y) { int F(int& x, int y) {
*x = y + *x; x = y + x;
return *x + 1; return x + 1;
} }
int G(int* y, int x) { int G(int& y, int x) {
*y = x + F(y, x); y = x + F(y, x); r
return *y + x; eturn y + x;
} }
int main() { int main() {
int x, y; int x, y;
x = 1; x = 1;
y = 2; y = 2;
y = G(&y, 2); y = G(y, 2);
return 0; return 0;
} } 19 di 49
Quesito 4 (punteggio 4)
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 1000
AAAAAA 22-11-2009
222 2000
NULL
AAAAAA
222 5000
BBBBBB 28-10-2009
111 1000
CCCCCC 30-12-2007
222 2000
NULL
CCCCCC
Scrivere la tabella con il risultato della seguente query scrivendo inoltre le tabelle intermedie che
si ottengono dalle sottoquery e dalle operazioni di prodotto cartesiano, selezione e proiezione:
SELECT CF, COUNT(*) AS C, SUM(B.D) AS S
FROM (SELECT COUNT(*) AS D FROM Aziende) A,
(SELECT CF, COUNT(*) AS D, COUNT(dataAss) AS F FROM Consulenti GROUP BY CF) B
WHERE A.D = B.D
GROUP BY CF
Esercizio 1 (9 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione copia con parametri:
· a di tipo vettore di 100 int;
· b di tipo vettore di 50 int;
· c di tipo vettore di 30 int;
La funzione deve copiare nel vettore b (in posizioni differenti) al più 50 valori del vettore a che
sono maggiori di tutti gli elementi del vettore c. Inoltre, la funzione deve restituire con un’istruzione
return il numero di valori copiati.
2. nella funzione main
I. dichiarare un vettore di nome x di 100 int, un vettore di nome y di 50 int e un vettore di nome z
di 30 int;
II. dichiarare una variabile di nome h di tipo int;
III. inserire (uno per ogni posizione) 100 valori letti da standard input nel vettore x;
IV. ripetere le seguenti operazioni fino a quando l’esecuzione della funzione copia inserisce un
valore in ogni posizione del vettore y:
a. inserire (uno per ogni posizione) 30 valori letti da standard input nel vettore z;
b. eseguire la funzione copia applicata al vettore x e al vettore z, inserendo il risultato nel vettore y
e nella variabile h. 20 di 49
Esercizio 2 (4 punti) Scrivere un algoritmo, codificato in linguaggio C/C++, che:
1. dichiara le variabili freqT, freqC e fine di tipo int;
2. esegue l’istruzione srand(time(NULL));
3. legge da standard input un numero intero memorizzandolo nella variabile fine. Si suppone che
durante l’esecuzione verrà inserito un numero intero positivo;
4. scrivere il valore 0 nella variabile freqT;
5. scrivere il valore 0 nella variabile freqC;
6. ripete le seguenti istruzioni che devono terminare quando il valore della variabile freqT supera il
valore della variabile fine:
a. inserisce in una variabile di nome lancio di tipo double il valore dell’espressione rand() /
((double) RAND_MAX);
b. se il valore della variabile lancio è maggiore di 0.5, incrementare di 1 il valore della variabile
freqT, altrimenti incrementare di 1 il valore della variabile freqC.
Nel programma prima della funzione main inserire le seguenti istruzioni:
* #include<stdlib.h>
* #include<time.h>
Esercizio 3 (7 punti) Il sistema informatico di una azienda di trasporti utilizza un database per
gestire le consegne. Nel database sono presenti le seguenti relazioni:
Clienti(CF, Indirizzo)
PianoConsegne(CF, IDM, Data, Stato)
dove nella relazione Clienti l’attributo CF è una chiave. Nella relazione PianoConsegne gli attributi
CF, IDM e Data formano una chiave e l'attributo CF è chiave esterna per la relazione Clienti. Ogni
tupla della relazione PianoConsegne memorizza negli attributi CF, IDM, Data e Stato
rispettivamente il cliente (CF), il codice di consegna (IDM), la data (Data) e lo stato (Stato) della
consegna. In ogni tupla il valore dell’attributo Stato può essere: magazzino, transito, consegnato.
cii
Scrivere l'istruzione SQL che:
1. visualizza i clienti (CF) a cui sono state consegnate (consegnato) tutte le merci;
2. visualizza il valore dell’attributo CF dei clienti che hanno un numero di merci consegnate
maggiore della media del numero di merci consegnate (consegnato) ad ogni cliente;
3. per ogni cliente, visualizza il numero di merci con valore dell’attributo Stato uguale a transito;
4. traduce la seguente espressione dell’algebra relazionale: operazione di selezione applicata alla
relazione PianoConsegne con predicato di selezione Stato<>’ magazzino’. 21 di 49
SOL UZ I ONE
Quesito 1 (punteggio 2)
//versione puntatori
La funzione è void quindi non restituisce un valore e non può essere effettuata un’addizione al
risultato.
Come primo parametro è richiesto un vettore double ed invece ne viene passato uno intero.
Come secondo parametro è richiesto un numero intero, quindi non può essere sommato un
numero con la virgola altrimenti diventa un valore double.
Come ultimo parametro è richiesto un puntatore, mentre viene passato un solo numero. La
dicitura corretta sarebbe &y.
Quesito 3 (punteggio 2)
Main
x y
- -
1 -
1 2 G(&y,2)
1 2
1 y x
2
1 2 2
&y
1 2 2
&y F(&y,2)
&y x y
1 2 2
1 &y &y
2 2 2
3 2 2 2
&y &y
—>4
&y
6 2 2
—> 8
6 8 22 di 49
Quesito 4 (punteggio 4)
TABELLA A
D 2
TABELLA B
CF D F
AAAA 2 1
BBBB 1 1
2 1
CCC
TABELLA A X B
A.D B.CF B.D B.F
2 2 1
AAAA
2 BBBB 1 1
2 2 1
CCCC
TABELLA FINALE
CF C S
1 2
AAAA
CCCC 1 2
23 di 49
Esercizio 1 (9 punti)
#include <stdio.h>
#include <stdlib.h>
int copia(int a[100], int b[50], int c[30]){
int conta=0;
int i,j,k;
int maggiore;
k=0;
for(i=0;i<100,i++){
maggiore=1;
for(j=0;j<30;j++){
if (a[i]<c[j]) maggiore=0;
}
if (maggiore==1){
b[k]=a[i];
k++;
}
}
return k;
}
int main()
{ int x[100];
int y[50];
int z[30];
int h;
for(i=0;i<100;i++) scanf("%d", &x[i]);
do{
for(i=0;i<30;i++)scanf("%d", &z[i]);
h=copia(x,y,z);
}while (h!=30);
system("PAUSE");
return 0;
} 24 di 49
Esercizio 2 (4 punti)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int freqT;
int freqC;
int fine;
double lancio;
srand(time(NULL));
scanf("%d",&fine);
freqT=0;
freqC=0;
do{
lancio=rand() / ((double) RAND_MAX);
if(lancio>0.5){
freqT++;
}
else{
freqC++;
}
}while(freqT<=fine);
system("PAUSE");
return 0;
}
Esercizio 3 (7 punti)
QUERY 1
SELECT CF
FROM PianoConsegne
GROUP BY CF
HAVING COUNT(*) = (SELECT COUNT(*)
FROM PianoConsegne
WHERE Stato=“consegnato”
GROUP BY CF) A
QUERY 2
SELECT CF
FROM PianoConsegne
GROUP BY CF
HAVING COUNT(*) > (SELECT AVG(NumOrdini)
FROM (SELECT COUNT(*) AS NumOrdini
FROM PianoConsegne
GROUP BY CF) A
) B 25 di 49
QUERY 3
SELECT CF, COUNT(*)
FROM PianoConsegne
WHERE Stato=“transito”
GROUP BY CF
QUERY 4
SELECT *
FROM PianoConsegne
WHERE Stato <> ‘Magazzino’ 26 di 49
Esame Informatica Generale
04/07/2018 Fila B
Quesito 1 (punteggio 2)
Si considerino le seguenti istruzioni del linguaggio c/c++.
int x[100];
double y;
fz(x, x[99], &x[3], y + 2.5) + 5.6; // puntatori
fz(x, x[99], x[3], y + 2.5) + 5.6; // riferimenti
Indicando a quale versione si fa riferimento (puntatori o riferimenti), scrivere l’intestazione
(prototipo) della funzione fz. Nella versione riferimenti la funzione deve modificare la variabile
indicata nel terz