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.
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.
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
H
3000
5000
3000
TABELLA B
H
1
2
TABELLA A X B
A.H B.H
3000 1
5000 1
3000 1
3000 2
5000 2
3000 2
TABELLA FINALE
SUM(A.H) SUM(B.H) COUNT(*)
6000 2 2
5000 1 1
6000 4 2
5000 2 1
Dispensa Temi Esame Informatica Generale Page 19
Esercizio 1 (9 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione Differenza con parametri:
I. a di tipo vettore di 100 int;
II. b di tipo vettore di 500 int;
III. c di tipo vettore di 500 int
La funzione scrive nel vettore c tutti i valori del vettore b che non sono contenuti nel vettore a.
2. nella funzione main
I. dichiarare due vettori x e z di 500 int ed y di 100 int;
II. riempire il vettore x con valori letti da standard input in modo tale che alla fine
dell’operazione il vettore x non contenga due valori uguali;
III. riempire il vettore y con valori letti da standard input;
IV. richiamare la funzione Differenza() con i parametri y, x e z.
Dispensa Temi Esame Informatica Generale Page 20
#include<stdlib.h>
#include<stdio.h>
void differenza(int a[100], int b[500], int c[500]){
int i,j,k;
int v;
/* La funzione scrive nel vettore c tutti i valori del vettore b che non sono contenuti
nel vettore a */
k=0;
for(i=0;i<500;i++){
v=0;
for(j=0;j<100;j++){
if(b[i]==a[j]) v=1;
}
if(v==0){
c[k]=b[i];
k++;
}
}
}
int main(){
int x[500], z[500], y[100];
int i,n,k;
int v;
/* riempire il vettore x con valori letti da standard input in modo tale che alla
fine dell’operazione il vettore x non contenga due valori uguali; */
i=0;
while(i<500){
scanf("%d",&n);
v=0;
for(k=0;k<i;k++){
if(n==x[k]) v=1;
}
if(v==0){
x[i]=n;
Dispensa Temi Esame Informatica Generale Page 21
i=i+1;
}
}
/*riempire il vettore y con valori letti da standard input; */
for(i=0;i<100;i++){
scanf("%d",&y[i]);
}
differenza(y,x,z);
system("PAUSE");
return 0;
}
Dispensa Temi Esame Informatica Generale Page 22
Esercizio 2 (4 punti)
Scrivere un algoritmo codificato in linguaggio C/C++ che:
1. legge da standard input un numero intero positivo che rappresenta un valore espresso in settimane
e lo inserisce in una variabile di nome S.
2. legge da standard input una sequenza di numeri interi che rappresentano una quantità di giorni.
Per ogni numero della sequenza il programma deve:
a. aggiungere il valore della sequenza ad una variabile di nome T;
b. visualizzare su standard output il valore contenuto nella variabile T espresso in settimane e
giorni. Ad esempio il numero 88 deve produrre su standard output il seguente messaggio:
12 settimane e 4 giorni
L’operazione di lettura termina quando il valore accumulato nella variabile T supera le settimane contenute
nella variabile S.
Dispensa Temi Esame Informatica Generale Page 23
#include<stdlib.h>
#include<stdio.h>
int main() {
int S, T = 0, n;
/* legge da standard input un numero intero positivo che rappresenta un valore espresso in settimane e lo
inserisce in una variabile di nome S. */
scanf("%d", &S);
/*punto 2*/
do { scanf("%d", &n);
T = T + n;
printf("%d settimane e ", T / 7);
printf("%d giorni", T % 7);
} while (T/7 < S);
system("PAUSE");
return 0;
}
Dispensa Temi Esame Informatica Generale Page 24
Esercizio 3 (9 punti)
Il sistema informatico del 118 utilizza un database per gestire gli interventi di un pronto soccorso. Nella
base di dati è presente la seguente tabella:
InvioAmbulanze (Targa, Data, CodiceIntervento, CodiceOspedale)
dove nella relazione InvioAmbulanze gli attributi Targa e Data formano la chiave primaria. Ogni tupla della
relazione InvioAmbulanze serve a memorizzare l’invio delle ambulanze.
L’attributo CodiceOspedale ha valore nullo quando l’ambulanza non necessita l’accompagnamento in
ospedale, i valori dell’attributo CodiceIntervento possono essere ‘Rosso’, ‘Giallo’, ‘Verde’ e ‘Bianco’ a
seconda della gravità dell’intervento, l’attributo Targa è la targa dell’ambulanza.
Scrivere l'istruzione SQL che:
1. imposta a ‘Bianco’ il valore di CodiceIntervento per tutte le tuple per le quali il valore di
CodiceOspedale è nullo.
2. visualizza il valore dell’attributo CodiceOspedale per gli ospedali in cui è arrivata la stessa
ambulanza almeno due volte;
3. visualizza per ogni ambulanza il numero di interventi in cui non si è reso necessario
l’accompagnamento in ospedale.
4. visualizza le ambulanze che anno effettuato un numero di interventi con codice ‘Rosso’ pari a
quello con codice ‘Bianco’ .
5. traduce la seguente espressione in algebra relazionale: operazione di prodotto cartesiano tra:
a. la relazione ottenuta da InvioAmbulanze attraverso un’operazione di selezione con
predicato di selezione Data = ‘2016-04-05’ e
b. la relazione ottenuta da InvioAmbulanze attraverso un’operazione di proiezione degli
attributi Targa e CodiceIntervento.
Dispensa Temi Esame Informatica Generale Page 25
QUERY 1
UPDATE InvioAmbulanze
SET CodiceIntervento = ‘Bianco’
WHERE CodiceOspedale IS NULL
QUERY 2
SELECT CodiceOspedale
FROM InvioAmbulanze
GROUP BY CodiceOspedale
HAVING COUNT(Targa) > 1
QUERY 3
SELECT Targa, COUNT(*)
FROM InvioAmbulanze
WHERE CodiceOspedale IS NULL
GROUP BY Targa
QUERY 4
SELECT Targa
FROM (SELECT Targa, COUNT(*) AS InterventiR
FROM InvioAmbulanze
WHERE CodiceIntervento = ‘Rosso’
GROUP BY Targa) A,
(SELECT Targa, COUNT(*) AS InterventiB
FROM InvioAmbulanze
WHERE CodiceIntervento = ‘Bianco’
GROUP BY Targa) B
WHERE A.Targa = B.Targa AND InterventiR = InterventiB
QUERY 5
SELECT *
FROM (SELECT *
FROM InvioAmbulanze
WHERE Data = ‘2016-04-05’) A,
(SELECT Targa, CodiceIntervento
FROM InvioAmbulanze) B
Dispensa Temi Esame Informatica Generale Page 26
Esame Informatica Generale 06/07/2016 Tema D
Esercizio 1 (9 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione carica() che ha in ingresso:
a. a di tipo vettore di 100 double;
b. b di tipo vettore di 100 double;
c. inf e sup di tipo int.
La funzione per ogni elemento nel vettore A verifica se esso è compreso tra i valori in inf e sup
(estremi inclusi) e in caso affermativo lo scrive nel vettore a B consecutivamente. La funzione
deve inoltre restituire il numero di elementi inseriti in B.
2. Scrivere la funzione main() che:
a. definisce due vettori di 100 elementi x ed y e le variabili intere inf, sup e r;
b. ripetere le seguenti azioni:
i. Inserisce in ogni posto del vettore x un valore letto da standard input;
ii. Inserisce due valori letti da standard input nelle variabili inf e sup;
iii. Esegue la funzione carica() applicata al vettore x e alle variabili inf e sup scrivendo il
risultato nel vettore y e nella variabile r.
L’operazione deve terminare quando il valore della variabile r è uguale a 100.
Dispensa Temi Esame Informatica Generale Page 27
#include<stdlib.h>
#include<stdio.h>
int carica(double a[100], double b[100], int inf, int sup){
int i,j;
/*La funzione per ogni elemento nel vettore A verifica se esso è compreso tra i
valori in inf e sup (estremi inclusi) e in caso affermativo lo scrive nel vettore a B
consecutivamente. */
j=0;
for(i=0;i<100;i++){
if(a[i]>=inf && a[i]<=sup){
b[j]=a[i];
j++;
}
}
/*La funzione deve inoltre restituire il numero di elementi
inseriti in B. */
return j;
}
int main(){
double x[100],y[100];
int inf,sup,r;
int i;
r=0;
while(r<100){
/*Inserisce in ogni posto del vettore x un valore letto da standard
input; */ for(i=0;i<100;i++){
scanf("%d",&x[i]);
}
/* Inserisce due valori letti da standard input nelle variabili inf e sup; */
scanf("%d",&inf);
scanf("%d",&sup);
Dispensa Temi Esame Informatica Generale Page 28
/*Esegue la funzione carica() applicata al vettore x e alle variabili
inf e sup scrivendo il risultato nel vettore y e nella variabile r. */
r=carica(x,y,inf,sup);
}
system("PAUSE");
return 0;
}
Dispensa Temi Esame Informatica Generale Page 29
Esercizio 2 (4 punti)
Descrivere un algoritmo codificato in linguaggio C/C++ che:
Definisce le seguenti variabili:
vd1 vettore di 100 double;
vd2 vettore di 100 double;
r di tipo int.
La funzione:
Inserisce nel vettore vd1 valori letti da standard input;
Inserisce nel vettore vd2 valori letti da standard input;
scrive nella variabile r il numero di elementi del vettore vd1 che sono maggiori di tutti gli elementi
del vettore vd2.
Dispensa Temi Esame Informatica Generale Page 30
#include<stdlib.h>
#include<stdio.h>
int main(){
double vd1[100],vd2[100];
int r;
int i,j;
int conta;
/* Inserisce nel vettore vd1 valori letti da standard input; */
for(i=0;i<100;i++){
scanf("%lf",&vd1[i]);
}
/* Inserisce nel vettore vd2 valori letti da standard input; */
for(i=0;i<100;i++){
scanf("%lf",&vd2[i]);
}
/* scrive nella variabile r il numero di elementi del vettore vd1 che sono maggiori di tutti gli elementi del
vettore vd2. */
r=0; for(i=0;i<100;i++){
conta=0;
for(j=0;j<100;i++){
if(vd2[j]>vd1[i]) conta=1;
}
if(conta==0) r++;
}
system("PAUSE");
return 0;
}
Dispensa Temi Esame Informatica Generale Page 31
Esercizio 3 (9 punti)
Una base di dati per la gestione delle fatture di una azienda contiene tra le altre le seguenti relazioni:
Importo (IDVoce, dataVar, Valore)
FatturaVoci (NUMFatt, IDVoce, Quantita)
Gli attributi che formano la chiave primaria sono indicati in grassetto. Le tuple della relazione FatturaVoci è
un numero intero e indica quanti articoli della stessa voce sono stati acquistati, mentre l’attributo IDVoce è
il codice del bene/servizio. Le tuple della relazione importo servono a memorizzare il costo dei beni/servizi,
l’attributo dataVar indica il giorno da cui è iniziata la vendita con il prezzo indicato nel campo valore, ovvero
vi è stata una variazione di prezzo.
Scrivere l'istruzione SQL che:
1. visualizza per ogni valore di IDVoce il numero totale di fatture in cui compare un valore di Quantita
inferiore a 10