Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

#include <stdio.h>

#include <stdlib.h>

int verifica(int a[100]){

int i;

int primomin, secondomin, terzomin;

primomin = a[1];

secondomin = a[1];

terzomin = a[1];

for(i=0;i<100;i++){

if(a[i]<primomin) primomin=a[i];

}

for(i=0;i<100;i++){

if(a[i]<secondomin && a[i] != primomin) secondomin=a[i];

}

for(i=0;i<100;i++){

if(a[i]<terzomin && a[i] != primomin && a[i] != secondomin) terzomin=a[i];

}

if (primomin != secondomin && primomin != terzomin && secondomin != terzomin) return 1;

else return -1;

} 8

int main(){

int x[100];

int y[20];

int i;

int j=0;

int risultato;

do{ for(i=0;i<100;i++) scanf("%d", &x[i]);

risultato = verifica(x);

if (risultato <0){

y[j]=risultato;

j=j+1;

}

} while(j<20);

system("PAUSE");

return 0;

} 9

Esercizio 2 (4 punti)

Descrivere un algoritmo codificato in linguaggio C/C++ che:

1. definisce due vettori: il primo di nome a contenente 1000 numeri interi ed il secondo di nome b

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 b inserendo i valori presenti nel vettore a

aumentati del valore minimo presente nel vettore a.

#include <stdio.h>

#include <stdlib.h>

int main(){

int a[1000];

int b[1000];

int i;

int min;

for(i=0;i<1000;i++) scanf("%d", &a[i]);

min=a[1];

for(i=0;i<1000;i++){

if(a[i]<min) min=a[i];

}

for(i=0;i<1000;i++){

b[i]=a[i]+min;

} 10

system("PAUSE");

return 0;

}

Esercizio 3 (9 punti)

Il sistema informatico di una nota azienda elettrica utilizza un database per gestire le fatture emesse. Nel

database sono presenti le seguenti relazioni:

Forniture (ID, CF, Indirizzo)

Fatture(NumeroFornitura, Data, Importo, Periodo)

Forniture ID Fatture

dove nella relazione l'attributo è la chiave primaria. Nella relazione gli attributi

NumeroFornitura Periodo NumeroFornitura

e formano la chiave primaria e l'attributo è chiave

Forniture. Fatture

esterna per la relazione Ogni tupla della relazione elenca le fatture emesse, in

Data Periodo

ogni tupla l'attributo rappresenta la data di pagamento della fattura e l'attributo

2015'

rappresenta il periodo di riferimento della fattura ad esempio 'I indica il primo trimestre del 2015

2013'

mentre 'IV indica il quarto trimestre del 2013.

data la seguente interrogazione SQL spiegare l’errore logico in essa contenuto (la query ha

1. sicuramente un errore):

SELECT NumeroFornitura, SUM(Importo)

FROM Fatture;

2. scrivere l'istruzione SQL che visualizza il codice fiscale (CF) degli utenti che hanno esattamente due

forniture;

3. scrivere l'istruzione SQL che visualizza l’importo totale delle fatture emesse nel 2016;

CF

4. scrivere l'istruzione SQL che visualizza i dei clienti che nel 2016 hanno un importo complessivo

di fatture maggiore della media degli importi delle fatture del 2016;

5. scrivere l'istruzione SQL che traduce la seguente espressione dell’algebra relazionale: prodotto

Forniture

cartesiano fra la tabella e quella che si ottiene attraverso un'operazione di

COUNT(*) Fatture.

proiezione dell'operatore dalla relazione

Query 1

Nella seguente query manca un raggruppamento in base al quale effettuare la sommatoria. La versione

corretta sarebbe:

SELECT NumeroFornitura, SUM(Importo)

FROM Fatture

GROUP BY NumeroFornitura 11

Query 2

SELECT CF

FROM Fatture, Forniture

WHERE NumeroFornitura=ID

GROUP BY CF

HAVING COUNT(*)=2

Query 3

SELECT SUM(Importo)

FROM Fatture

WHERE Data BETWEEN ‘01/01/2016’ AND ‘31/12/2016’

Query 4

SELECT CF

FROM Forniture, Fatture

WHERE NumeroFornitura = ID AND Data BETWEEN ‘01/01/2016’ AND ‘31/12/2016’

GROUP BY CF

HAVING SUM(Importo) > ( SELECT AVG(Importo)

FROM Forniture, Fatture

WHERE NumeroFornitura = ID AND Data BETWEEN ‘01/01/2016’ AND

‘31/12/2016’

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 funzione applicata al vettore al vettore inserendo

t;

il risultato nella variabile 28

#include <stdio.h>

#include <stdlib.h>

void Maggiori(int a[500], int b[500], int *d){

*d=-1;

int conta=0;

int pos=1000;

int i,j;

for(i=0;i<500; i++){

conta=0;

for(j=0;j<500;j++){

if(a[i]>b[j]) conta++;

}

if(conta=500) pos=i;

}

if (pos != 1000) *d=pos;

}

int main(){

int x[500];

int z[500];

int i;

int t; 29

for(i=0;i<500;i++) scanf("%d", &x[i]);

do{ for(i=0;i<500;i++) scanf("%d", &z[i]);

Maggiori(x,z,&t);

}while(t != -1);

system("PAUSE");

return 0;

} 30

Esercizio 2 (4 punti)

Scrivere un algoritmo, codificato in linguaggio C/C++, che:

vett[100] int;

1. dichiara un vettore di vett

2. inserisce in tutte le posizioni del vettore dei numeri interi letti da standard input

vett

3. scambia tutti i valori di posti pari del vettore con quelli di posto dispari (considerare 0 come

posto pari).

#include <stdio.h>

#include <stdlib.h>

int main(){

int vett[100];

int i;

int pari=0, dispari=1;

int temp;

for(i=0; i<100; i++) scanf("%d", &vett[i]);

do{ temp=vett[pari];

vett[pari]= vett[dispari];

vett[dispari]=temp;

} while(pari<99 && dispari <100);

system("PAUSE");

return 0;

} 31

Esercizio 3 (9 punti)

Una azienda di intrattenimento utilizza un base di dati per gestire il servizio di streaming. Nella base di dati

sono presenti le seguenti tabelle:

Film (ID, Durata)

Visionati (IDC, IDF, Data, Ora, DurataStream)

FILM ID Visionati IDC,

dove nella relazione l’attributo è una chiave. Nella relazione gli attributi

IDF, Data Ora IDF Film.

e formano una chiave e l’attributo chiave esterna per la relazione In ogni

Film Durata

tupla della relazione l’attributo memorizza la durata (in minuti) del film. Le tuple della

Visionati IDC, Data,

relazione servono per memorizzare i film visionati dai clienti, gli attributi e

Ora sono rispettivamente il codice del cliente, la data e l’orario di inizio visione del film, mentre l’attributo

DurataStream memorizza (in minuti) per quanto tempo il cliente ha visionato il film, questo valore

potrebbe essere inferiore alla durata del film quando un cliente interrompe lo streaming prima della

conclusione del film.

Scrivere l'istruzione SQL che: Visionati DurataStream

1. elimina le tuple della relazione il cui valore dell’attributo è uguale

a 0.

2. visualizza una sola volta i codici dei clienti che, per almeno un film, hanno interrotto la visione

prima della conclusione del film.

3. visualizza i codici dei film che non sono mai stati visionati.

4. per i film che sono stati visionati almeno una volta, visualizza il codice del film, il numero di volte

che è stato visionato ed il numero totale di ore che è stato visionato;

5. traduce la seguente espressione dell’algebra relazionale: operazione di prodotto cartesiano tra la

Film IDC, Data

relazione e la relazione ottenuto da un’operazione di proiezione degli attributi

DurataStream Visionati.

e sulla relazione

Query 1

DELETE FROM Visionati

WHERE DurataStream = 0

Query 2

SELECT DISTINCT(IDC)

FROM Film, Visionati

WHERE ID = IDF and DurataStream < Durata 32

Query 3

SELECT ID

FROM Film

WHERE ID NOT IN (SELECT IDF

FROM Visionati) X

Query 4

SELECT IDF, COUNT(*), SUM(DurataStream)/60

FROM Visionati

GROUP BY IDF

Query 5

SELECT *

FROM Film, (SELECT IDC, Data, DurataStream

FROM Visionati) X 33

Esame Informatica Generale 15/06/2017 – Fila B

Quesito 1 (punteggio 2)

Si consideri il seguente frammento di programma in linguaggio C:

do{ i = i + a;

j = j / 2;

} while (i <= j)

while,

utilizzando il ciclo scrivere un frammento di programma equivalente.

While (i<=j){

I = i + a;

j = j/2;

}

Quesito 2 (punteggio 2)

Descrivere la funzione della CPU. 34

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 = 1; x = 1;

y = G(&x) + 1; y = G(x) - 1;

return 0; return 0;

} } 35

Main

X Y

- -

1 - G(&x)

1 - Y x

1 - &x - F(&x)

1 - &x - y

1 - &x - &x

0 - &x - &x  -1

0 - &x 2

-1 - &x 2

 -3

-1 -2 36


ACQUISTATO

4 volte

PAGINE

65

PESO

985.37 KB

AUTORE

cassy14

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in marketing, comunicazione aziendale e mercati globali
SSD:
A.A.: 2018-2019

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à Milano Bicocca - Unimib o del prof Avellone Alessandro.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Informatica generale

Soluzione Esami Informatica Generale Febbraio 2017
Appunto
Riassunto Completo C++ e SQL - Informatica Generale
Appunto
Formulario completo Matematica Generale
Appunto