Anteprima
Vedrai una selezione di 10 pagine su 49
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 1 Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 2
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 6
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 11
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 16
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 21
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 26
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 31
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 36
Anteprima di 10 pagg. su 49.
Scarica il documento per vederlo tutto.
Soluzione Temi Esame Informatica generale - Aprile Settembre 2018 Pag. 41
1 su 49
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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

Dettagli
Publisher
A.A. 2018-2019
49 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher cassy14 di informazioni apprese con la frequenza delle lezioni di Informatica generale e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano - Bicocca o del prof Avellone Alessandro.