Esercizio 1 (punteggio 7) Dato un file di testo denominato interi.txt contenente in ogni riga due numeri interi positivi. Scrivere un programma C (Pascal) che per ogni coppia di interi X ed Y appartenenti alla stessa rig a del file inter i.txt scrive sul file coprimi.txt il numero X se X e Y hanno almeno un divisore comune diversi da 1, Y altrimenti. Ad esempio: interi.txt coprimi.txt 5 15 5 21 7 21 4 15 15 25 16 16 #include <stdio.h>#include <stdlib.h>int coprimi(int x, int y) { int flag=1, i; for(i=x; i>1; i--) if((y%i == 0) && (x%i == 0)) flag=0; return flag; } int main() { FILE *fi, *fo; int x, y; fi = fopen("interi.txt","r"); fo = fopen("coprimi.txt","w"); if(fi==NULL || fo==NULL) exit(-1); while(fscanf(fi,"%d%d",&x,&y) != EOF) { if(coprimi(x,y)==0) fprintf(fo,"%d\n",x); else fprintf(fo,"%d\n",y); } fclose(fi); fclose(fo); return 0; } Esercizio 2 (punteggio 7)
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Esercizio 1 (punteggio 7)Dato un file di testo denominato interi.txt contenente in ogni riga due numeri interi positivi.Scrivere un programma C (Pascal) che per ogni coppia di interi X ed Y appartenenti allastessa riga del file interi.txt scrive sul file coprimi.txt il numero X se X e Y hanno almeno undivisore comune diversi da 1, Y altrimenti.Ad esempio:
Definire un tipo di dato struct (record per Pascal) di nome INTERNO con due campi A e B di tipo int
(integer per Pascal). Definire un tipo di dato struct (record per Pascal) di nome ESTERNO con due
campi C e D di tipo INTERNO.
Scrivere una funzione C (procedura per Pascal) che ha in ingresso un parametro X di tipo ESTERNOche restituisce 1 se il campi A delle componenti C e D di X sono rispettivamente uguali ai campi B
Esercizio 1 (punteggio 7)Dato un file di testo denominato interi.txt contenente in ogni riga un numero intero. Scrivereun programma C (Pascal) che letto da standard input un intero positivo X e calcolata la mediaM dei valori contenuti nel file interi.txt, scrive sul file maggiori.txt i valori di interi.txt che distanomeno di X da M. Utilizzare la funzione abs(y) per determinare il valore assoluto.Ad esempio se X vale 2:
interi.txt maggiori.txt8 811 767
#include <stdio.h> #include <stdlib.h>
int main(){
FILE *fi, *fo;int X, M, v;double cont;
fi = fopen("interi.txt","r");fo = fopen("maggiori.txt","w");
Esercizio 2 (punteggio 7)Definire un tipo di dato struct (record per Pascal) di nome ORARIO con due campi ora e minuti ditipo int (integer per Pascal). Definire un tipo di dato struct (record per Pascal) di nome TEMPI condue campi primo e secondo di tipo ORARIO.
Scrivere una funzione C (procedura per Pascal) che ha in ingresso un parametro X di tipo TEMPI che
restituisce la differenza in minuti tra i campi primo e secondo di X.
Ad esempio, se il campo ora di primo contiene 2 ed il campo minuti di primo contiene 23, mentre ilcampo ora di secondo contiene 5 ed il campo minuti di secondo contiene 35, la funzione deve
restituire -192. Oppure, se il campo ora di primo contiene 6 ed il campo minuti di primo contiene 13,
mentre il campo ora di secondo contiene 5 ed il campo minuti di secondo contiene 35, la funzione
a = X.primo.ora*60 - X.secondo.ora*60 + X.primo.minuti-
X.secondo.minuti;
return a;}
int main() //NON RICHIESTO DAL TESTO{
TEMPI Y={{2,23}, {5 ,35}};TEMPI Z={{6 ,13},{5, 35}};
printf("%d\t%d\n",funz(Y),funz(Z));
return 0;}
Esercizio 3 (punteggio 6)Sintetizzare con il minor numero di bit in binario la funzione f(x)= |x| (valore assoluto o modulo di x),dove x è un numero in complemento a 2 di 2 bit.
Esercizio 1 (punteggio 7)Scrivere un programma C che esegue le seguenti operazioni: legge da standard input una sequenza di numeri interi inserendoli in un vettore A.
L’operazione di lettura deve terminare quando viene inserito un numero negativo oviene inserito il millesimo valore,inserisce in un vettore B opportunamente dimensionato i valori dispari contenuti nelvettore A.
#include <stdio.h> #include <stdlib.h> #define DIM 100int main(){
Definire un tipo di dato struct di nome INS composto da tre campi: V di tipo vettore di 100elementi di tipo int, A di tipo int e B di tipo int.Scrivere una funzione C con un parametro di nome ST di tipo INS che modifica STinserendo nelle posizioni pari del campo V di ST il valore del campo A di ST, mentre nellerestanti posizioni del campo V di ST inserisce il valore del campo B di ST.#include <stdio.h>#include <stdlib.h>#define DIM 100
Esercizio 3 (punteggio 6)Una società che produce mobili in kit gestisce una base di dati per la produzione checontiene tra le altre le seguenti relazioni:
Mobile (codice, descrizione, prezzo)Componente (codice, descrizione)Costruzione(codMobile, codComp, quantita)
dove nella relazione Mobile l’attributo codice è la chiave primaria. Nella relazioneComponente l’attributo codice è la chiave primaria. Nella relazione Costruzione gli attributicodMobile e codComp sono la chiave primaria e sono chiavi esterne rispettivamente per lerelazioni Mobile e Componente.Si chiede di:
scrivere l’interrogazione SQL che permette di visualizzare per ogni valore dell’attributo
codice della relazione Mobili il numero di componenti utilizzati per la costruzione,
SELECT codMobile, count(*) AS TotCompFROM CostruzioneGROUP BY codMobile
scrivere l’interrogazione SQL che permette di visualizzare il valore di descrizione della
relazione Mobile, di descrizione della relazione Componente e di quantita dellarelazione Costruzione dei mobili che hanno il valore dell’attributo prezzo più elevato,ordinando il risultato per l’attributo codice della relazione Mobile.
SELECT Mobile.descrizione, Componente.descrizione, quantitaFROM Mobile, Componente, Costruzione
WHERE Costruzione.CodMobile = Mobile.codice AND Costrizione.CodComp = Componente.codice AND prezzo = (SELECT max(prezzo) FROM Mobile)
Esercizio 1 (punteggio 7)Scrivere un programma C che esegue le seguenti operazioni: legge da standard input 1000 numeri interi ed inserisce in un vettore A
opportunamente dimensionato solo i numeri compresi tra 1 e 100 estremi inclusiscartando gli altri, inserisce in un vettore B opportunamente dimensionato la frequenza assoluta di ogni
numero contenuto nel vettore A.
#include <stdio.h> #include <stdlib.h> #define DIM 1000#define DIMFr 100
Esercizio 2 (punteggio 7)Definire un tipo di dato struct INS composto da un campo A di tipo vettore di 100 elementi ditipo int e da un campo B di tipo double. Definire un tipo di dato struct di nome OUT composto
da un campo T di tipo double.Scrivere una funzione C con un parametro ST di tipo INS ed un parametro R di tipo OUT* cheinserisce nel campo T del parametro R il rapporto tra il valore massimo tra gli elementi delcampo A di ST diviso il valore contenuto nel campo B di ST.
#include <stdio.h>#include <stdlib.h>#define DIM 5
typedef struct {int V[DIM]; double B}INS;
typedef struct {double T;} OUT;
void C (INS ST, OUT *R){
int i, max;max = ST.V[0];for(i=1;i<DIM;i++)if(max < ST.V[i])max = ST.V[i];
dove nella relazione Medico l’attributo codice è la chiave primaria. Nella relazione Specialital’attributo codice è la chiave primaria. Nella relazione Tariffa l’attributo qualifica è la chiave
primaria. Nella relazione MediciSpecialita gli attributi codMedico e codSpec sono la chiaveprimaria e sono chiavi esterne rispettivamente per le relazioni Medico e Specialita. Sisuppone che non esistano due medici con lo stesso nome e cognome.Si chiede di: definire in SQL le 3 relazioni
Produrre le dichiarazioni C che permettono didefinire una struttura denominata DATI composta da due campi uno e due di tipoint, una struttura denominata STRUTDATI con un campo vt, vettore di 30 elementi di tipo
DATI, ed un campo, max di tipo int.
Scrivere quindi la funzione che ha in ingresso un elemento x di tipo STRUTDATI e che restituisce nel
campo max il valore più grande contenuto nel campo vt (essendo il campo composto da un vettore di
tipo DATI il valore massimo va ricercato su entrambi i campi uno e due).
Un sistema per la gestione degli spettacoli teatrali contiene fra le altre due relazioni (ingrassetto sono indicati gli attributi che costituiscono la chiave)
Si chiede di formulare le seguenti interrogazioni: elencare il valore di Titolo, in ordine decrescente di spettatori abbonati che lo hanno
visto; elencare Cognome e Nome e numero degli Spettacoli Visti da ciascun abbonato; elencare Cognome e Nome degli abbonati che hanno visto più spettacoli in
assoluto.
Esercizio 1 (7 punti)Il file uno.txt contiene su ogni riga due numeri decimali, mentre il file due.txt ne contiene uno
solo per riga. Scrivere il programma C che leggendo in parallelo i file uno.txt e due.txt scrive sul
file terzo.txt il valore 1 se il valore contenuto in due.txt è strettamente maggiore di entrambi i
valori contenuti in uno.txt, 0 altrimenti. I file uno.txt e due.txt non hanno lo stesso numero di
righe. Se il file due.txt termina prima del file uno.txt sul file terzo.txt si scrive il valore –1
per ogni riga di uno.txt che non ha corrispondenza in due.txt. Se il file uno.txt termina prima
del file due.txt si ricopia il contenuto residuo di due.txt su terzo.txt.
Esercizio 2 (7 punti)Produrre le dichiarazioni C che permettono di definire una struttura denominata DATI composta da due campi uno e due di tipo
double, un vettore di 30 elementi di tipo DATI denominato VETDATI.
Scrivere quindi la funzione che ha in ingresso un vettore v di tipo VETDATI e che restituisce attraverso
il parametro par1 l’elemento di v con il valore massimo del campo uno e attraverso il parametro
par2 l’elemento di v con il valore minimo del campo due. In entrambi i casi se più di un elemento
rispondesse alla richiesta ne sceglierebbe uno qualunque.
Esercizio 3 (6 punti)I dipendenti di una società fruiscono di un sistema di buoni mensa di diversi fornitori. Lasocietà per gestire il servizio ha creato una base di dati che contiene fra le altre le seguenti
relazioni (in grassetto gli attributi che costituiscono la chiave):
Si chiede di formulare le seguenti interrogazioni: elenca per ogni Cognome e Nome in Dipendente il numero di buoni spesi e quanti
valori diversi ha CAPLuogoFruizione; elenca per ogni fornitore quanti buoni sono stati spesi dai dipendenti;elenca Cognome e Nome dei Dipendenti che hanno usato il minimo numero dibuoni mensa.
E1Dato un file di testo chiamato dati.txt già esistente contenente uno per riga valori cherappresentano numeri decimali, scrivere un programma in linguaggio C in cui si dichiarinodue vettori denominati rispettivamente VT1 e VT2 formati da 10 elementi di tipo double e che
svolga i seguenti compiti:
legge da dati.txt e pone i valori positivi in VT1 e quelli negativi in VT2; la lettura termina
quando il file è finito o entrambi i vettori sono stati riempiti (quando uno dei due vettoriè pieno si riempie solo l'altro vettore e scartando i valori che andrebbero inseriti nelvettore pieno); determina il valore massimo contenuto in ciascun vettore tenendo conto solo dei valori
effettivamente inseriti (ad esempio se VT1 è stato riempito dalla posizione 0 allaposizione 4 calcola il valore massimo compreso nelle posizioni da 0 a 4);
E2Definire un nuovo tipo di dato chiamato ST formato da due campi A e B il primo di tipo doubleed il secondo di tipo vettore di 10 int. Scrivere la funzione ft che:
restituisce, attraverso un opportuno parametro, una struttura di tipo ST nella quale il
campo A contiene il rapporto fra il valore massimo ed il valore minimo del campo B. restituisce il numero di elementi di B superiori al valore calcolato nel punto precedente
(Esempio se il campo B contiene [12, 3, -5, 7, 8, 120, 2, -1, -9, 1] in A andrà il valore -13,333,la funzione restituirà inoltre il valore 10)
#include <stdio.h> #include <stdlib.h> typedef struct {double A; int B[10];} ST;int fz(ST *par){ int num=0, i;
double m, M;
M=m=par->B[0];
for(i=1; i<10; i++)if (m > par->B[i])m = par -> B[i];
else if (M < par-> B[i])M = par -> B[i];
par -> A = M/m;
for(i=0; i<10; i++)if(par->B[i] > par->A)num++;
return num;}int main() //NON RICHIESTO DAL TESTO{ ST s={0.0,12, 3, -5, 7, 8, 120, 2, -1, -9, 1};
int t;t = fz(&s); printf("%d %f\n",t,s.A);system("pause"); return 0;
}
E3Sintetizzare la funzione booleana f(x)=x*2 - 1 dove x è un numero binario senza segno di 2 bite l'uscita deve essere espressa in complemento a 2 con il minor numero di bit.
E1Scrivere un programma C che compie le seguenti operazioni: inserisce in un vettore di nome VETT di 20 interi una sequenza di numeri letti da
tastiera. Il caricamento del vettore deve terminare o al raggiungimento del ventesimonumero o quando è inserito il primo numero strettamente inferiore a 2. memorizza in un secondo vettore di nome PRIMI quei numeri di VETT che sono primi;
tale vettore deve essere riempito progressivamente a partire dalla cella di indice 0 (nondeve contenere buchi ); memorizza in un terzo vettore di nome GRANDI quegli elementi di primi strettamente
maggiori di 50. Tale vettore deve essere riempito progressivamente a partire dallacella di indice 0 (non deve contenere buchi ).
#include <stdio.h>#include <stdlib.h>typedef int VETTORE[20];void stampa(int *v, int l, char *s){int i;printf("%s: ",s);for(i=0; i<l; i++)printf("%3d\t",v[i]);
printf("\n");}
int primo(int v){ int i;for( i=2; i<v; i++)
if (v%i == 0)return 0;
return 1;}
int main(){VETTORE VETT={0}, PRIMI={0}, GRANDI={0};int i,j,k,v;
E2Definire un nuovo tipo di dato di nome IMPIEGATO contenente i campi di nome ID e
STIPENDIO, entrambi di tipo int. Scrivere una funzione con un parametro formale di nome X
vettore composto da elementi di tipo IMPIEGATO ed un parametro formale di nome DIM di
tipo intero che rappresenta il numero di componenti di X. La funzione deve restituire:
attraverso un valore di ritorno la media dei valori contenuti nel campo STIPENDIO attraverso il parametro formale TOT il numero di elementi di X che hanno un valore nel
E3Sintetizzare la funzione booleana f(x)=2x-2, dove x è un numero binario assoluto di 2 bit. Ilrisultato deve essere espresso in complemento a due con il minor numero possibile di bit.
X1 X0 X f(x) Y3 Y2 Y1 Y00 0 0 -2 1 1 1 0
0 1 1 0 0 0 0 0
1 0 2 2 0 0 1 0
1 1 3 4 0 1 0 0
Y0 = 0;Y1 = -X0Y2 = -X1-X0 + X1X0
Y3 = -X1-X0
E1.Scrivere un programma C che compie le seguenti operazioni: legge da tastiera una sequenza di numeri interi e la memorizza nel file di nome
dati.txt. La sequenza termina quando viene inserito un numero negativo o un
numero strettamente superiore a 20. Di ogni numero N presente in dati.txt calcola il valore di 2N (senza usare la
funzione di libreria pow()) e memorizza il risultato nel file potenza.txt;
Di ogni numero intero compreso tra zero e dieci presente nel file dati.txt calcola la
Esercizio 3Sintetizzare la funzione f(x,y)=x*y+3, dove x e y sono numeri rappresentati in complemento a2 usando 1 bit. Il risultato deve essere espresso in forma di numero binario assoluto.
X0 Y0 X X f(x,y) U2 U1 U00 0 0 0 3 0 1 10 1 0 -1 3 0 1 1
1 0 -1 0 3 0 1 11 1 -1 -1 4 1 0 0
U2 = X0Y0U1=U0 = -(X0Y0)= -X0 + -Y0
E1Scrivere un programma C che:
ha in ingresso due file denominati rispettivamente A.txt e B.txt contenenti su ogniriga un numero intero. Il numero di righe dei due file non è noto a priori ma è ugualenei due file; definisce una matrice di nome MATRI 2 X 10 di tipo opportuno;
riempie la prima riga di MATRI con gli elementi di A.txt fino al riempimento della riga
o all'esaurimento dei dati letti dal file; riempie la seconda riga di MATRI con gli elementi di B.txt fino al riempimento della
riga o all'esaurimento dei dati letti dal file; copia in un vettore VETT gli elementi presenti nella prima riga della matrice che
soddisfano i seguenti criteri: il valore è copiato solo se è maggiore o uguale al valore corrispondente nella
seconda riga della matrice; il vettore non deve presentare buchi , ovvero deve essere riempito senza
soluzione di continuità.Il programma stampa i valori effettivamente inseriti in VETT.
E3Una sistema di ordini on line si compone fra le altre delle seguenti relazioni (in neretto sonoindicati gli attributi che compongono la chiave primaria):Utente (IDUtente, password, CAP)Merce (IDMerce, descrizione, prezzoUnitario)Ordine (NumeroOrdine, IDUtente, data, importoTotale)VociOrdine(NumeroOrdine, IDMerce, importoVoce)
Per semplicità si supponga che il formato di data sia gg/mm/aaaa.
Formulare le seguenti interrogazioni: Indicare per ogni valore di NumeroOrdine il numero di voci che compongono l'ordine. Indicare il valore di descrizione per le merci che non compaiono in nessun ordine. per valore di NumeroOrdine eguale a 432 calcola il valore di importoTotale ed aggiorna
l'attributo importoTotale nella relazione Ordine.
SELECT NumeroOrdine, count(*) AS TotaleVociFROM VociOrdineGROUP BY NumeroOrdine
SELECT descrizioneFROM Merce
WHERE IDMerce NOT IN (SELECT IDMerce FROM VociOrdine)
FROM VociOrdine WHERE NumeroOrdine =432)WHERE NumeroOrdine = 432
E1Un programma C: ha in ingresso un file denominato rendimenti.txt contenente 10 righe dove ogni
riga indica il valore di un rendimento annuale espresso come percentuale, legge un valore iniziale CAP indicante un capitale iniziale legge un valore obiettivo, denominato TARGET, che indica il capitale finale desiderato.
Il programma calcola anno per anno il valore della somma capitale + rendimento annuale epone il risultato in un vettore TOT opportunamente dimensionato. Il calcolo si interrompe
quando il valore calcolato è maggiore o uguale a quello di TARGET o si superano i 10 anni.
Il programma produce in uscita la stampa dei valori presenti nel vettore TOT limitatamente alle
posizioni utilizzate; in caso non si sia raggiunto il valore di TARGET stampa valore non
raggiunto altrimenti stampa il numero di anni necessari a raggiungere il valore di TARGET.
E3Una base di dati per la gestione di centraline per la rilevazione dell'inquinamento ha fra lealtre le seguenti relazioni (in grassetto sono indicati gli attributi che formano la chiave):
Dove in Rilevazioni gli attributi IdCentralina ed IdInquinante sono chiavi esterne rispettivamente per lerelazioni Centalina ed Inquinanti. Inoltre, per semplicità si supponga che il formato di Data sia
gg/mm/aaaa e quello di Ora hh:mm.
Formulare le seguenti interrogazioni: Eliminare tutte le rilevazioni quando IdInquinate è uguale a COx e Valore è superiore
a ValMax. Indicare il numero di inquinanti diversi rilevato da ogni centralina. Dato il giorno 02/06/2007 determinare quante centraline hanno avuto un valore di
IdInquinante PM10 strettamente superiore al valore medio dell'inquinante.
DELETE FROM Rilevazioni WHERE Valore > (SELECT ValMax
FROM Inquinanti WHERE IdInquinante = 'COx')
AND IdInquinante = 'COx'
SELECT IdCentralina,count(DISTINCT IdInquinante) AS numeroInquinanti
Esercizio 1 (10 punti)Le tuple delle relazione Impiegati(Matricola,Stipendio,AnnoNascita) e Laureati(Matricola,Voto)i cui attributi sono tutti di tipo intero sono rispettivamente memorizzati nei file di nomeimpiegati.txt e laureati.txt. Scrivere un programma che svolga le seguenti operazioni: Memorizza in un file di nome Elevati.txt, quelle tuple di Impiegati il cui stipendio è
superiore alla media degli stipendi ed il cui anno di nascita è compreso tra il 1970 ed il1975. Memorizza in un file di nome Proiettato.txt il risultato dell’operazione di proiezione
dell’algebra relazionale di Impiegati sugli attributi Matricola e Nascita. Memorizza in un file di nome Query.txt il risultato della seguente query SQL:
SELECT * FROM Impiegati,Laureati WHERE Impiegati.Matricola=Laureati.Matricola .
#include<stdio.h>
int main(void){
FILE *imp, *lau,*ele,*pro,*que;
double media;
int nroImp,x,y,z,mat,voto;
imp=fopen("impiegati.txt","r");
ele=fopen("elevati.txt","w");
if (imp==NULL || ele == NULL) return -1;
media=0; nroImp=0;
while(fscanf(imp,"%d%d%d",&x,&y,&z) != EOF){
media=media+y;
nroImp++;
}
media=media/nroImp;
rewind(imp);
while(fscanf(imp,"%d%d%d",&x,&y,&z) != EOF){if (y> media && z>1970 && z<1975) fprintf(ele,"%d%d%d\n",x,y,z);
Esercizio 2 (6 punti)Definire un tipo di dato INFO struttura contenente un campo di nome MAT, matrice didimensione 10x10 di interi. Scrivere una funzione con due parametri formali X e Y entrambi ditipo int e che restituisce attraverso un valore di ritorno una struttura di tipo INFO in cui ilcampo MAT contiene il valore X nelle celle della prima e ultima riga e il valore Y nelle restanticelle.
#include<stdio.h>
typedef struct{int MAT[10][10];} INFO;
INFO f(int x,int y){
INFO Q;
int i,j;
for(i=0;i< 10;i++){
Q.MAT[0][i]=x;
Q.MAT[9][i]=x;
}
for(i=1;i< 9;i++){
for(j=0;j<10;j++)
Q.MAT[i][j]=y;}
return Q;
}
int main(){
return 0;
}
Esercizio 3 (4 punti)Sintetizzare la funzione f(x)=2x+3, dove x è un numero in complemento a 2 di 2 bit. La
funzione deve essere rappresentata in complemento a due con il minimo numero di bit.
Esercizio 1 (10 punti)Scrivere un programma che svolga le seguenti operazioni: Definisce due matrici MAT e ADATTI entrambe di 2 righe e 20 colonne contenenti
numeri interi. Definisce un vettore COEFF contenente 20 numeri interi. Inserisce nella matrice MAT una sequenza di numeri interi letti da tastiera. I numeri
positivi e dispari sono i soli numeri della sequenza che devono essere memorizzatinella matrice. La lettura della sequenza di numeri termina al riempimento dellamatrice. Per ogni colonna di MAT verifica che il numero nella prima riga sia maggiore o uguale
a quello nella seconda ed in caso affermativo copia entrambi i numeri nella matriceADATTI. La coppia di numeri deve essere copiata così da rispettare le rispettive
posizioni di riga. Inoltre, la matrice ADATTI deve essere riempita progressivamente apartire dalla prima colonna (non deve contenere buchi). per ogni colonna di ADATTI calcola il coefficiente binomiale dei 2 numeri e memorizza
Definire un tipo di dato RIGHE, struttura con due campi di nome prima e ultima entrambi ditipo vettore di 10 int. Definire un tipo di dato MAT, matrice 10x10 di interi. Scrivere unafunzione con un parametro formale di nome X di tipo MAT che restituisce una struttura di tipo
RIGHE il cui campo prima contiene i dati della prima riga di X e il campo ultima contiene idati dell'ultima riga di X.
#include<stdio.h>
typedef struct{int prima[10],ultima[10];} RIGHE;
typedef int MAT[10][10];
RIGHE f(MAT X){
RIGHE Q;int i;
for(i=0;i< 10;i++){
Q.prima[i]=X[0][i];
Q.ultima[i]=X[9][i];
}
return Q;
}
Esercizio 3 (4 punti)Sintetizzare la funzione f(x)=2x+1, dove x è un numero binario positivo di 2 bit. La funzione
deve essere rappresentata in binario con il minimo numero di bit.
Esercizio 1 (8 punti)
Scrivere un programma C che faccia quanto segue:
1) Inizializza la prima riga di una matrice 50x50 di nome M con il valore 1;
2) legge una sequenza di numeri interi e li mette nella prima riga didella matrice M. La lettura della sequenza termina quando alla primariga della matrice M sono stati assegnati 50 interi oppure quando
vieneletto il secondo numero intero negativo;
3) copia il contenuto della prima riga in tutte le righe successive.
Definire un nuovo tipo di dato di nome REC, struttura condue campi:
il primo campo, di nome b2, deve essse di tipo vettore di 10componenti di tipo int;
il secondo campo, di nome b10, deve essere di tipo int.
Scrivere una funzione di nome F con un parametro formale di nomeX di tipo REC passato per indirizzo. La funzione deve assegnare alcampo b10 di X il risultato della conversione da base 2 a base 10 delnumero dato nel campo b2 di X.
tipo NUMERI passato per indirizzo. La funzione deve assegnare alcampo cpl2 di X il risultato del complemento a 2 del numero nel campo
b2 diX. Nota: se il complemento a 2 di b2 non esiste, allora la funzione
puo' mettere in cpl2 quello che vuole.
typedef struct{int b2[10],cpl2[10];} NUMERI;
f(NUMERI *X){int i;
i=10;do{i--;X->cpl2[i]=X->b2[i];
}while(X->b2[i]!=1 && i>0);i--;while(i>=0){
X->cpl2[i]=1-X->b2[i];i--;
}}
Esercizio 3 (4 punti)Sintetizzare con il minor numero di bit la funzione f(x)=(x+1)*8,dove x èun numero rappresentabile in complemento a 2 con un bit.
Esercizio 1 (punteggio 10)Sia dato un file di testo denominato dati.txt contenete numeri interi positivi. Scrivere un
programma in linguaggio C che: definisce un vettori V contenente 100 numeri interi; legge gli interi di dati.txt e li memorizza in V. L’operazione di lettura termina
quando vengono inseriti 100 numeri in V oppure quando viene letto dal file un valore
che è una potenza di 7 oppure quando vengono esauriti gli elementi del file dati.txt.Negli ultimi due casi le restanti posizioni di V sono inizializzate con il valore 0.
Visualizza su standard output i valori contenuti in V che sono divisibili per 3.
int x[100], i=0,b,j;f=fopen("C:/temp/dati.txt", "r"); /*suppongo dati.txt in C:/temp */
if (f==NULL) exit(-1);
while ((fscanf(f, "%d", &b)!= EOF) && (i<=99) && (!potenza(b)))
{x[i]=b; if ((x[i]%3)==0) printf("%d\n", x[i]);i++; }
fclose(f);
for (j=i; j<=99; j++)
x[j]=0;
system("PAUSE");
return 0;
}
Esercizio 2 (punteggio 6)Definire un tipo di dato struct di nome ST con due campi A e B di tipo int. Quindi scrivere unafunzione con due parametri V di tipo vettore di 100 elementi di tipo ST e R di tipo ST Lafunzione deve assegnare a tutti gli elementi di V la struct R con i campi A e B incrementati delvalore dell’indice di V.
#include <stdio.h>#include <stdlib.h>
typedef struct {int A; int B;} ST;
void f (ST v[100], ST R){int i;for (i=0; i<=99; i++){v[i].A = R.A+i;v[i].B = R.B+i;}
}
Il main è per provare f e non era richiesto nel compito
Esercizio 3 (punteggio 4)Si deve realizzare un circuito che calcoli la funzione f(x,y)=xy, dove x è un numero di due bit incomplemento a due mentre y è un numero binario positivo di un bit. Calcolare il minimonumero di bit in uscita del circuito esibendo i calcoli, scrivere la tavola di verità del circuito e leespressioni booleane che rappresentano la funzione. Si assume che la funzione f(0,0)=1.
x1 x0 y F(x,y) C1 C0
0 0 0 1 0 1
0 0 1 0 0 0
0 1 0 1 0 1
0 1 1 1 0 1
1 0 0 1 0 1
1 0 1 -2 1 0
1 1 0 1 0 1
1 1 1 -1 1 1
C1=x1y
C0=-x1-y + x1y + x0y + -x0-y
Esercizio 1 (8 punti)Dato un file di testo denominato dati.txt e contenente solo numeri interi positivi, scrivere unprogramma C che per ogni numero X contenuto in dati.txt visualizzi su standard outputl’elenco dei numeri primi che dividono X.
while(fscanf(f,"%d",&X) != EOF){printf("divisori primi di %d: ",X);for(i=1;i<=X;i++)if(primo(i)==1 && X%i==0)printf("%d ",i);
printf("\n");}
system("pause");return 0;
}
Esercizio 2 (6 punti)Definire un tipo di dato T, struttura con due campi il primo di nome dati di tipo vettore di 10 inted il secondo di nome val tipo int. Scrivere una funzione con un parametro formale di nome Xdi tipo T che restituisce 1 se il valore del campo val di X è contenuto in una qualche posizionedel campo dati di X, 0 altrimenti.
Esercizio 1 (8 punti)Scrivere un programma che svolga le seguenti operazioni: Definisce una matrice M di 20x20 numeri interi. Legge una sequenza di numeri interi da standard input ed inserisce i numeri pari nella
matrice M. La lettura della sequenza di numeri termina al riempimento della matriceM. Visualizza su standard input la frequenza assoluta di ogni elemento delle matrice.
Esercizio 2 (6 punti)Definire un tipo di dato MV, struttura con due campi il primo di nome m di tipo matrice di10x10 int ed il secondo di nome v tipo int. Scrivere una funzione con un parametro formale
di nome X di tipo MV che restituisce 1 se nel campo m di X è presente almeno un valore dellostesso segno del campo v di X, 0 altrimenti.
#include <stdio.h>#include <stdlib.h>#define DIM 3typedef struct{int m[DIM][DIM], v;}MV;
Esercizio 2 (6 punti)Definire un tipo di dato MAT, matrice 10x10 di interi. Scrivere una funzione con un parametroformale di nome X di tipo MAT ed un parametro formale di nome Y di tipo vettore di 10 interiche inserisce in Y i valori contenuti nella diagonale principale di X.
#include <stdio.h> #include <stdlib.h> #define DIM 10
typedef int MAT[DIM][DIM];
void diag(MAT X, int Y[])
{int i;
for(i=0;i<DIM;i++)
Y[i] = X[i][i];}
//NON RICHIESTO DAL TESTOint main(){
MAT A, B={0};
int i,j,t=0;for(i=0;i<DIM;i++)A[i][i] = t++;
diag(A,B);for(i=0;i<DIM;i++){
for(j=0; j<DIM; j++)printf("%3d ",B[i][j]);
printf("\n");}system("pause"); return 0;
}
Esercizio 3 (4 punti)Sintetizzare la funzione f(x, y)= x-y, dove x e y sono numeri in complemento a due di 1 bit. Lafunzione deve essere rappresentata in complemento a due con il minimo numero di bit.
X Y X Y X-Y U1 U00 0 0 0 0 0 00 1 0 -1 1 0 11 0 -1 0 -1 1 1
Esercizio 1 (10 punti)Scrivere un programma che svolga le seguenti operazioni: Definisce due vettori VETT1 e VETT2 entrambi contenenti 20 numeri interi. Legge una sequenza di numeri interi da standard input ed inserisce i numeri pari nel
vettore VETT1 ed i numeri dispari nel vettore VETT2. La lettura della sequenza dinumeri termina al riempimento di uno dei due vettori.
Inserisce nelle restanti posizioni di VETT1 il valore 2 e nelle restanti posizioni di VETT2il valore 3. Visualizza su standard output la differenza tra i valori contenuti delle medesime
posizioni di VETT1 e VETT2.
#include <stdio.h> #include <stdlib.h> #define DIM 5
Esercizio 2 (6 punti)Definire un tipo di dato MAT, matrice 10x10 di interi. Scrivere una funzione con due parametriformali di nome X e Y entrambi di tipo MAT. La funzione inserisce in Y i valori contenuti in Xinvertendo le righe con le colonne (calcolando così la matrice trasposta di X).
#include <stdio.h> #include <stdlib.h> #define DIM 10
typedef int MAT[DIM][DIM];
void trasposta(MAT X, MAT Y){
int i, j,k;
for(i=0;i<DIM;i++)for(j=0; j<DIM; j++)
Y[j][i] = X[i][j];}
//NON RICHIESTO DAL TESTOint main(){
MAT A, B;int i,j,t=0;for(i=0;i<DIM;i++)
for(j=0; j<DIM; j++)A[i][j] = t++;
trasposta(A,B);for(i=0;i<DIM;i++){
for(j=0; j<DIM; j++)printf("%3d ",B[i][j]);
printf("\n");}system("pause"); return 0;
}
Esercizio 3 (4 punti)Sintetizzare la funzione f(x, y)= x+y, dove x e y sono numeri in complemento a due di 1 bit. La
funzione deve essere rappresentata in complemento a due con il minimo numero di bit.
X Y X Y X+Y U1 U00 0 0 0 0 0 00 1 0 -1 -1 1 11 0 -1 0 -1 1 11 1 -1 -1 -2 1 0
U1 = X + YU0 = -XY + X-Y
Esercizio 1 (punteggio 10)
Scrivere un programma C che: Definisce un vettore di nome V contenente cento numeri interi. Legge da standard input una sequenza di numeri interi ed inserisce dentro V, senza
lasciare spazi vuoti, i numeri positivi della sequenza che sono numeri primi.L’operazione di lettura termina al riempimento del vettore V oppure quando viene lettoda standard input il valore 0. Visualizza su standard output gli elementi contenuti in V che sono stati inseriti da
standard input. Visualizza su standard output il massimo tra i valori inseriti dentro V.
Definire un tipo di dato struct di nome ST con un campo A di tipo int ed un campo B di tipovettore di 10 int. Quindi scrivere una funzione con ingresso un parametro V di tipo ST cherestituisce 1 se ogni elemento del campo B di V è divisibile per il valore del campo A, 0altrimenti.
#include <stdio.h>#include <stdlib.h>
typedef struct {int A; int B[10];} ST;
int f (ST V){int i;for (i=0; i<=9; i++)if ((V.B[i]%V.A) != 0) return 0;return 1; /* perchè con l'else sarebbe stato errato? */
}
/* Il main non è richiesto e serve per provare f */
int main(){ ST x;
int j;scanf("%d", &x.A);
for (j=0; j<=9; j++)x.B[j]=4*j;printf("%d\n", f(x));system("PAUSE");return 0;}
Esercizio 3 (punteggio 4)Si deve realizzare un circuito che calcoli la funzione f(x,y,z)=(x-y)*z, dove x,y,z, sono tre numeri di un
bit in complemento a due. Calcolare il minimo numero di bit in uscita del circuito esibendo i calcoli,scrivere la tavola di verità del circuito e le espressioni booleane che rappresentano la funzione.
E1.Il file di testo estratti.txt contiene su ogni riga un numero compreso fra 1 e 90. Si
desidera: stabilire la frequenza assoluta di ogni numero e memorizzare tale informazione in un
vettore di nome vFreq opportunamente dimensionato; visualizzare quale è il numero che compare con più frequenza fra quelli possibili; visualizzare quale è la media dei dati in vFreq; caricare il file di testo freqRel.txt con la frequenza relativa (rapporto fra la
frequenza assoluta e il numero totale di valori in estratti.txt) di ognuno dei
E2.Si definisca la struttura dati COPPIA composta da due campi di tipo int di nome A e B. Si
definisca quindi il tipo VettoreDiCoppie vettore di 20 elementi di tipo COPPIA. Si
costruisca la funzione fzt() che ha in ingresso un parametro formale di tipo
VettoreDiCoppie di nome parVt e che restituisce attraverso un secondo parametro
formale di nome rest, di tipo opportuno, l’elemento di parVt che ha il valore del prodottodei campi A e B minore (se vi è più di un elemento con queste caratteristiche ne restituisce
uno qualsiasi).
#include<stdio.h> #include <stdlib.h>
#define DIM 20typedef struct {int A, B;} COPPIA;typedef COPPIA VettoreDiCoppie[DIM];
E3.Una società che rileva i prezzi in alcune catene di supermercati ha deciso di racchiudere leinformazioni in un data base che contiene fra le altre le seguenti relazioni:Catena (Nome, CodiceCatena, Sede)Produttore (CodiceProduttore, Indirizzo, PrefissoTelefonico)Prodotti (CodiceProdotto, CodiceProduttore, Descrizione)Costo (CodiceNegozio, CodiceProdotto, prezzo, DataRilevazione)
Negozio (CodiceNegozio, CodiceCatena, indirizzo, CAP)Gli attributi sono di tipo stringa tranne prezzo e DataRilevazione che sono
rispettivamente di tipo real e date.
Scrivere le interrogazioni SQL che permettano :
elencare in ordine crescente per l’attributo CodiceProduttore e quindi in ordine
decrescente per l’attributo Descrizione le tuple della relazione Prodotti;
indicare per ogni valore di Descrizione della relazione Prodotti quante rilevazioni
di prezzo ha avuto; indicare per ogni valore di CodiceCatena e di DataRilevazione il prezzo medio
dei prodotti venduti.
1- select * from prodotti order by CodiceProduttore, Descrizione desc
2- select Descrizione,count(*)from Prodotti,Costo,where Predotti.CodiceProdotto=Costo.CodiceProdottogroup by Descrizione
E3Una società che rileva i prezzi in alcune catene di supermercati ha deciso di racchiudere leinformazioni in un data base che contiene fra le altre le seguenti relazioni:
ordine crescente per l’attributo CAP tutte le tuple della relazione Negozio;
per indicare per ogni valore di CodiceCatena e Nome della catena quanti negozi
possiede; per ogni valore di CodiceProdotto e di DataRilevazione il prezzo medio del
prodotto.
SELECT *FROM negozioORDER BY CodiceCatena DESC, CAP
SELECT Catena.CodiceCatena,Nome,count(*) AS ‘Totale negozi’FROM Catena,Negozio
WHERE Catena.CodiceCatena=Negozio.CodiceCatenaGROUP BY Catena.CodiceCatena,Nome
SELECT CodiceProdotto,DataRilevazione, avg(prezzo) AS ‘Prezzo medio’
FROM CostoGROUP BY CodiceProdotto,DataRilevazione
Esercizio 1 (8 punti)Sia dato un file di testo denominato dati.txt contenente numeri interi. Scrivere un programmaC che: Definisce una matrice di nome M di dimensione 10x10 contenente numeri interi. Legge i numeri interi contenuti nel file dati.txt ed inserisce nella diagonale principale di
M solo i numeri positivi di dati.txt. La lettura termina quando si è riempita la diagonaleprincipale di M oppure quando sono terminati i valori del file. In quest’ultimo caso lerestanti posizioni della diagonale principale devono essere riempite con il valore 0. Per ogni riga della matrice M, il valore dell’elemento della diagonale principale viene
copiato in tutte le colonne della riga. Visualizza su standard output il contenuto della diagonale secondaria.
Si ricorda che la diagonale principale di una matrice è la linea di valori che unisce la cella inalto a sinistra con quella in basso a destra; la diagonale secondaria, invece, unisce la cella inaltro a destra con quella in basso a sinistra.
#include <stdio.h>
#include <stdlib.h>#define DIM 10int main(){int M[DIM][DIM], i, j, val;FILE *f; f = fopen("dati.txt","r");if (f == NULL)
Esercizio 2 (6 punti)Definire un tipo di dato T1, struct con due campi di nome A di tipo int e B di tipo double.Definire un tipo di dato T2, struct con un campo di nome C di vettore di 100 numeri interi.Scrivere la funzione fz() con due parametri K di tipo T1 e H di tipo puntatore ad un elemento
di tipo T2. La funzione deve modificare l’area di memoria puntata da H inserendo in tutti glielementi del campo C il rapporto tra il campo A di K ed il campo B di K.
dove nella relazione Treni l’attributo Codice è la chiave primaria. Nella relazione Partenze gliattributi Codice e data formano la chiave primaria mentre l’attributo Codice è chiave esternaper le relazione Treni.
Scrivere le interrogazioni SQL che permettono di: Visualizzare i valori di CittaPartenza e CittaArrivo di tutti i treni che partono il 10 luglio
2009 e con un valore dell’attributo prezzoBiglietto superiore a 100. Eliminare dalla relazione Partenze tutte le tuple relative a Treni che partono da
Firenze. Visualizzare per ogni Treno il valore massimo dell’attributo prezzoBiglietto.
Esercizio 1 (8 punti)Sia dato un file di testo denominato dati.txt contenente numeri interi. Scrivere un programmaC che: Definisce una matrice di nome M di dimensione 2x10 contenente numeri interi. Inserisce in ogni posizioni dispari delle due righe della matrice M il valore 1. Legge i numeri interi contenuti nel file dati.txt ed inserisce nella posizioni pari di della
prima riga di M i numeri negativi del file dati.txt. La lettura termina quando si sonoriempite tutte le posizioni pari della prima riga di M oppure quando sono terminati ivalori del file. In quest’ultimo caso le restanti posizioni non occupate devono essereriempite con il valore 0. Inserisce nelle posizioni pari della seconda riga di M il valore della corrispondente
posizione nella prima riga di M incrementato di 1. Visualizza su standard output il contenuto della seconda riga di M.
#include <stdio.h>#include <stdlib.h>
#define DIM 10int main(){int M[2][DIM], i, j, val;FILE *f; f = fopen("dati.txt","r");if (f == NULL)exit(-1);
Esercizio 2 (6 punti)Definire un tipo di dato S, struct con due campi di nome M di tipo int e N di tipo double.Definire un tipo di dato T, struct con un campo di nome F di vettore di 100 numeri interi.Scrivere la funzione ft() con due parametri H di tipo S e G di tipo puntatore ad un elemento ditipo T. La funzione deve modificare l’area di memoria puntata da G inserendo in tutti glielementi del campo F la somma tra il campo M di H ed il campo N di H.
#include <stdio.h>#include <stdlib.h>#define DIM 10
typedef struct{int M; double N;} S;typedef struct{int F[DIM];} T;
dove nella relazione Treni l’attributo Codice è la chiave primaria. Nella relazione Partenze gliattributi Codice e data formano la chiave primaria mentre l’attributo Codice è chiave esternaper le relazione Treni.
Scrivere le interrogazioni SQL che permettono di: Visualizzare i valori di data e prezzoBiglietto di tutti i treni che partono da Milano ed
rit = media(Vett, i);printf("%f %f\n",rit.A, rit.B);
close(f);
system ("pause"); return 0;}
E2.
Definire un nuovo tipo di dato di nome RETTANGOLO contenente 2 campi di nome BASE e
ALTEZZA, entrambi di tipo int. Scrivere una funzione con un parametro formale X vettore di
elementi di tipo RETTANGOLO ed un parametro formale di nome DIM di tipo intero cherappresenta il numero di componenti di X. La funzione fa quanto segue:
restituisce attraverso un opportuno parametro formale 1 se ogni campo di ogni
componente di X è strettamente positivo, 0 altrimenti. restituisce, attraverso un opportuno parametro formale, un elemento di X il cui prodotto
void fz(RETTANGOLO X[], int DIM, int *ret,RETTANGOLO *maxSup){
int i, max, s;max = X[0].BASE * X[0].ALTEZZA;*ret=1;for(i=0;i<DIM;i++)
{if(!(X[i].BASE >0 && X[i].ALTEZZA >0))
*ret = 0;else
s = X[i].BASE * X[i].ALTEZZA;
if(s > max){ max = s;*maxSup = X[i];
}}
}
int main(){ RETTANGOLO x[]={{4,5},{-2,3},{8,9}}, sp;int r;fz(x,3,&r,&sp);printf("%d %d\n",r,sp.BASE*sp.ALTEZZA);system("pause"); return 0;
}
E3.Sintetizzare la funzione booleana f(x), dove x è numero rappresentabile in complemento a 2a tre bit, definita come segue:se x>=0, allora la funzione vale la parte intera della radice quadrata,
se x<0, allora la funzione vale -1.Le uscite della funzione devono essere rappresentate in complemento a due con il minor numero di bit.
definisce un tipo vettore di 5000 elementi di tipo EL denominato VEl; definito un vettore Vett di tipo VEl e dati i file di testo dati1.txt e dati2.txt
contenenti su ogni riga rispettivamente un numero intero ed un numero decimale, ilprogramma si comporta come segue: i numeri in dati1.txt sono memorizzati
campo X delle celle di Vett, i numeri in dati2.txt sono memorizzati nel
campo Y delle celle di Vett. I file dati1.txt e dati2.txt contengono lo stesso
numero di elementi; la lettura termina o con l’esaurimento dei dati nel file o con ilriempimento completo di Vett;
Definire un nuovo tipo di dato di nome IMPIEGATO contenente i campi di nome COD e EARN,entrambi di tipo int. Scrivere una funzione con un parametro formale di nome X vettore
composto da elementi di tipo IMPIEGATO ed un parametro formale di nome DIM di tipo intero
che rappresenta il numero di componenti di X. La funzione deve restituire: attraverso un parametro formale media dei valori contenuti nel campo EARN
attraverso il parametro formale TOT il numero di elementi di X che hanno un valore nel
E3.Sintetizzare la funzione f(x,y)=x*x+y dove x è un numero rappresentabile in complemento adue con 2 bit e y è un numero rappresentabile in complemento a due con un bit. L'uscita della
funzione deve essere rappresentata in complemento a due.
for(i=0;i<DIM;i++) //NON RICHIESTO DAL TESTOprintf("%d ",vt[i]);
fclose(f);system("pause");return 0;
}
E2.Si desidera comparare il costo per lavaggio di 30 diversi detersivi in polvere. A questo scoposi definisce la struct denominata detersivo composta dai seguenti campi:
pesoConfezione di tipo int,
costoConfezione di tipo double,
quantitaDiDetersivoPerLavaggio di tipo double, costoPerLavaggio di tipo double.
e il vettore confronto di 30 elementi di tipo detersivo.
Si chiede di:dichiarare i tipi per le due strutture dati (detersivo e confronto), scrivere la funzione minimo() che ha in ingresso un parametro V di tipo
confronto in cui ogni elemento contiene i valori di tutti i campi eccetto per il
campo costoPerLavaggio e che
per ogni posizione di V calcola il valore del costo per lavaggio ed inserisce
tale risultato nel campo costoPerLavaggio; restituisce la posizione di V dell’elemento che ha il valore minimo del
campo costoPerLavaggio. In caso vi fosse più di un elemento con
queste caratteristiche sceglie uno fra quelli che hanno il valore dipesoConfezione minimo.
#include <stdio.h> #include <stdlib.h> #define DIM 30
dove nella relazione STUDENTI l’attributo Matricola è la chiave primaria; nella relazioneINSEGNAMENTO l’attributo Codice è la chiave primaria. Infine nella relazione ESAMI gliattributi Matricola e Insegnamento formano la chiave primaria, l’attributo Matricola è chiaveesterna per la relazione STUDENTI e l’attributo Insegnamento è chiave esterna per la
relazione INSEGNAMENTO.Scrivere le query SQL per:
visualizzare le Matricole degli studenti che non hanno registrato nessun esame; visualizzare per ogni insegnamento il codice dell’insegnamento e il numero di studenti
che hanno registrato l’esame. visualizzare l’elenco degli esami, voto e nome dell’insegnamento, dello studente
Giovanni Verga.
SELECT MatricolaFROM STUDENTI
WHERE Matricola NOT IN (SELECT MatricolaFROM Esami) SELECT Insegnamento, COUNT(*) AS TotRegistrati
AND Studenti.Matricola = Esami.MatricolaAND Studenti.Nome = ‘Giovanni’
AND Studenti.Cognome = ‘Verga’
E1.Il contenuto del vettore vtD di 20 elementi di tipo double ed il contenuto del vettore vtI di 20elementi di tipo int devono essere scritti sul file di testo uscita.txt mettendo su ogni riga del fileun elemento di vtD ed un elemento di vtI. Terminata la scrittura dei valori è aggiunta sul fileuna riga contenente la media dei valori in vtD e vtI. Supponete i vettori già caricati.
#include <stdio.h>#include <stdlib.h>#define DIM 20
int main(){ FILE *f;
int vtI[DIM]={5, -3, 69, -789, 12}, i, mediaInt=0;double vtD[DIM]={78.2, 16.9, -56.25, 14.36, 126.89}, mediaDouble=0.0;
f = fopen("uscita.txt","w");if (f == NULL) exit(-1);
E2.Si devono scegliere a fronte di un prestito 20 diverse modalità di rimborso caratterizzate daun numero di rate, costo per rata e costo di pratica da pagare in una unica soluzione.Si è pensato di creare per ogni proposta una struttura chiamata proposta formata dai
seguenti campi: numeroRate di tipo int,
costoRata di tipo double,
costoPratica di tipo double,
costoTotale di tipo double.
Si è anche deciso di raggruppare tutte le proposte in un vettore denominato scelte
composto da 20 elementi di tipo proposta.
Si chiede di: dichiarare i tipi delle due strutture dati (proposta e scelte)
dove nella relazione STUDENTI l’attributo Matricola è la chiave primaria; nella relazioneINSEGNAMENTO l’attributo Codice è la chiave primaria. Infine nella relazione ESAMI gliattributi Matricola e Insegnamento formano la chiave primaria, l’attributo Matricola è chiaveesterna per la relazione STUDENTI e l’attributo Insegnamento è chiave esterna per larelazione INSEGNAMENTO. Inoltre nel campo Lode della relazione ESAMI contiene 1 sel’esame è stato superato con la lode, 0 altrimenti.Scrivere le query SQL per:
visualizzare le Matricole degli studenti che non hanno avuto nessuna lode; visualizzare per ogni studente che ha ottenuto almeno una lode il numero di esami
superati con la lode. visualizzare Nome e Cognome degli studenti che hanno registrato un esame il 12-01-
2008.
SELECT MatricolaFROM STUDENTI
WHERE MATRICOLA NOT IN (SELECT MATRICOLA FROM ESAMIWHERE Lode = 1) SELECT Matricola, SUM(Lode) AS TotaleLodi
FROM EsamiGROUP BY MatricolaHAVING SUM(Lode) >=1 SELECT Cognome, Nome
FROM STUDENTI WHERE MATRICOLA IN (SELECT MATRICOLA
FROM ESAMIWHERE Data = ‘12/01/2008’)
E1Scrivere un programma C che:
Legge da standard input 20 valori interi positivi e li inserisce in un vettore denominato
VAL. La lettura deve essere interrotta se l’utente inserisce valori negativi. Legge da standard input 5 valori reali e li inserisce in un vettore denominato PARAM Scrive sul file risultati.txt i prodotti tra ciascuno dei valori presenti nel vettore
VAL e la media aritmetica dei valori contenuti nel vettore PARAM
int VAL[DIM], i,j;double PARAM[5], media=0.0;FILE *f;
f = fopen("risultati.txt","w");if (f == NULL) exit(-1);
i=-1;do {i++;
printf("dammi un intero positivo: ");scanf("%d",&VAL[i]);
} while(i<DIM-1 && VAL[i] >= 0);
media=0.0;for (j=0;j<5;j++)
{printf("dammi un numero decimale: ");scanf("%lf",&PARAM[j]);media = media + PARAM[j];
} media = media/j;
for(j=0;j<i;j++)fprintf(f,"%f\n",VAL[j]*media);
fclose(f);
system("pause"); return 0;}
E2Scrivere una funzione C che ha in ingesso attraverso un opportuno parametro una struct xcon tre campi a, b e c di tipo int. La funzione restituisce attraverso un parametro formale
dello stesso tipo di x, quanto segue: nel campo a il minimo fra x.a, x.b e x.c, nel campo b ilmassimo fra x.a, x.b e x.c, e nel campo c la media aritmetica fra x.a, x.b e x.c.
Una base di dati per la gestione dei movimenti finanziari dei conti correnti si compone, fra lealtre, delle seguenti relazioni (gli attributi che formano la chiave sono indicati in neretto):
indicare il valore totale dei movimenti di ogni filiale di ogni banca indicando anche il
valore dell’attributo denominazione (si ricorda che il valore di CAB indica la filiale ed ilvalore di ABI il codice della banca).
SELECT denominazione, ContribuenteBanca.CAB,sum(Importo) AS ‘Totale Movimenti’
FROM Banca, ContribuenteBanca, Movimento WHERE
Banca.ABI =ContribuenteBanca.ABI AND
Movimento.ABI = ContribuenteBanca.ABI AND
Movimento.CAB = ContribuenteBanca.CAB AND
Movimento.CC = ContribuenteBanca.CC
GROUP BYMovimento.ABI, Movimento.CAB, Movimento.CC, denominazione
eliminare dalla relazione Movimento tutti i movimenti eseguiti nell’anno 2002
DELETEFROM Movimento
WHERE Data between ‘2002-01-01’ AND ‘2002-12-31’
E1Scrivere un programma C che: ha in ingresso un file denominato valori.txt, del quale non si conosce la
lunghezza a priori, contenente su ogni riga due numeri interi. legge i valori contenuti nel file, interrompendo la lettura se si incontra la coppia di
valori -65535 ; -65535. Nel caso non si incontri tale coppia di valori, il file dovrà essereletto interamente fino alla fine.
Stampa a video la media aritmetica dei numeri pari letti e la media aritmetica deinumeri dispari letti. Se termina con la lettura della coppia di valori -65535; -65535questi ultimi non vanno contati nel calcolo della media dei numeri dispari.
E2Scrivere una funzione C che ha in ingesso attraverso un opportuno parametro una struct xcon due campi a di tipo int e b di tipo vettore di 10 int. La funzione restituisce un
parametro formale di nome y dello stesso tipo di x i cui campi contengono i seguenti dati: y.a contiene il minimo di x.b, y.b contiene in ogni componenteil valore di x.a.
#include <stdlib.h> #define DIM 10typedef struct {int a, b[DIM];} REC;
system("pause"); return 0;}E3Una base di dati per la gestione dei movimenti finanziari dei conti correnti si compone, fra lealtre, delle seguenti relazioni (gli attributi che formano la chiave sono indicati in neretto):
indicare il numero complessivo di contribuenti presenti nelle città Milano e Roma
SELECT count(*) AS ‘totale contribuenti Mi e RM’FROM Contribuente
WHEREcitta = ‘Milano’ OR citta = ‘Roma’;
indicare i valori di ABI, CAB e CC per i conti correnti con più di 2 movimenti
SELECT ABI,CAB,CC, count(*) AS ‘totale movimenti’FROM MovimentoGROUP BY ABI, CAB, CCHAVING count(*) > 2;
aggiornare la relazione Movimento decrementando di 2 euro i valori Importo relativi ai
movimenti effettuati a partire dal 1° Gennaio 2008
UPDATE Movimento
SET Importo = Importo -2 WHERE Data >= ‘2008-01-01’ AND Data <= '2008-12-31'
E1(7 punti)Scrivere un programma che fa quanto segue: Definisce un vettore V di 10 interi; Carica il vettore V con dati provenienti dalla tastiera. I dati devono essere inseriti in V se e
solo se sono compresi tra zero e sette estremi inclusi. Il caricamento di V termina quandotutte le sue celle sono state riempite con un dato proveniente da tastiera. Il programma interpreta ogni dato in V come la cifra di un numero in base otto e ne
stampa a video la conversione in base 2.
#include <stdio.h>#include <stdlib.h>typedef int T[10];typedef int A[3];
Una sistema di ordini on line si compone fra le altre delle seguenti relazioni (in neretto sonoindicati gli attributi che compongono la chiave primaria):Utente (IDUtente, password, CAP)Merce (IDMerce, descrizione, prezzoUnitario)Ordine (NumeroOrdine, IDUtente, data, importoOrdine)VociOrdine(NumeroOrdine, IDMerce, importoVoce)
Per semplicità si supponga che il formato di data sia gg/mm/aaaa.
Formulare le seguenti interrogazioni:
Cancellare dalla relazione Merce quelle tuple che corrispondono a merci che non sono
mai state ordinate(ovvero che non compaiono in VociOrdine).
DELETEFROM Merce
WHERE Merce.IdMerce NOT IN(SELECT IdMerceFROM VociOrdine)
Abbassare di 5 il prezzoUnitario di quelle tuple di Merce che hanno prezzo Massimo
E1(7 punti)E' stato organizzato un torneo ad eliminazione diretta (tipo incontri di tennis). I partecipantivengono accoppiati. Se il numero i partecipanti è dispari, un giocatore ottiene un bonus epassa d'ufficio, insieme ai giocatori che vincono il proprio incontro, al turno successivo. Si
procede con questo modo di accoppiare i giocatori e farli giocare fino a determinare ilvincitore del torneo.Scrivere un programma che legga un intero positivo che rappresenta il numero di giocatori iscritti al torneo. Il
programma deve controllare anche che il numero inserito sia strettamente positivo ed in
caso contrario chiederlo nuovamente fino a quando non viene inserito un dato corretto; per ogni turno del torneo stampi a video il numero di giocatori, quante partite si giocano e
se c’è o meno un giocatore che ha avuto il bonus.
As esempio, se ci sono 10 giocatori il programma deve stampare:turno 1: 10 giocatori,5 partite, 0 bonus;
E2(7 punti)Definite un tipo MATR, matrice di 10x10 di tipo int ed un tipo K, struct con un campo di nomeM di tipo MATR e due campi di nome freq1 e freq2 entrambi di tipo int.Scrivere una funzione con un parametro formale di tipo MATR che restituisce attraverso un
valore di ritorno una struct di tipo K contenente nel campo M il parametro formale dellafunzione, nel campo freq1 quante volte compare nel campo M del parametro formale ilnumero 1 e nel campo freq2 quante volte compare nel campo M del parametro formale ilnumero 2.
typedef int MATR [10] [10] ;typedef struct { MATR M ; int frequ1; int frequ2 ; } K ;K f ( MATR b ){ i , j , conta1, conta2 ; K a ;
Un sistema per la gestione degli spettacoli teatrali contiene fra le altre le relazioni (ingrassetto sono indicati gli attributi che costituiscono la chiave).
E1.I file di testo dati1.txt e dati2.txt contengono su ogni riga un numero intero. Scrivere il
programma C che legge in parallelo i due file e scrive sul file risultati.txt il prodotto dei
due numeri letti. Quando un file fra dati1.txt e dati2.txt termina mentre l’altro contieneancora degli elementi, su risultati.txt vengono scritti gli elementi del file non ancora
terminato.Esempio
dati1.txt
dati2.txt
risultati.txt
23412-3
6
58-3
11532-36-3
6
#include <stdio.h> #include <stdlib.h>
int main(){FILE *f1, *f2, *f3;int v1,v2;
f1 = fopen("dati1.txt","r");f2 = fopen("dati2.txt","r");
Un sistema per la gestione degli spettacoli teatrali contiene fra le altre le relazioni (ingrassetto sono indicati gli attributi che costituiscono la chiave).
tot = 0;for(i=0; i<DIM; i++){vt[i] = par.b*par.a[i];if (par.a[i] > par.b)tot++;
}return tot;
}int main()
{ ST pt={{4.2,-4.2,9.0},3.2};double v[DIM];int i;
printf("%d\n",fk(pt,v));
for(i=0;i<DIM;i++)printf("%6.3f ",v[i]);
system("pause"); return 0;}
E3
Una sistema di ordini on line si compone fra le altre delle seguenti relazioni (in neretto sonoindicati gli attributi che compongono la chiave primaria):Utente (IDUtente, password, CAP)Merce (IDMerce, descrizione, prezzoUnitario)Ordine (NumeroOrdine, IDUtente, data, importoOrdine)VociOrdine(NumeroOrdine, IDMerce, importoVoce)
Per semplicità si supponga che il formato di data sia gg/mm/aaaa.
Formulare le seguenti interrogazioni:
Visualizzare il valore di IDUtente per gli utenti che hanno effettuato almeno 10 ordini
ciascuno di importo superiore a 1000 Euro.
SELECT IDUtenteFROM Ordine
WHERE importoOrdine > 1000GROUP BY IDUtenteHAVING count(*) > 10
Visualizzare per ogni valore di IDUtente l’importo totale di tutti gli ordini effettuati
SELECT IDUtente, sum(importoOrdine) AS ‘Totale Ordini’FROM OrdineGROUP BY IDUtente
Cancellare dalla relazione Utente gli utenti non hanno fatto ordini.
DELETEFROM UTENTE
WHERE IDUtente NOT IN (SELECT DISTINCT IDUtente FROM Ordine)
E1
Dato un file di testo chiamato dati.txt già esistente contenente uno per riga valori cherappresentano numeri relativi, scrivere un programma in linguaggio C in cui si dichiarino duestruct ST1 e ST2 ciascuna con due campi a e b di tipo int e che effettua le seguentioperazioni:
scrive su video quanti valori contiene il file dati.txt; pone nel campo a di ST1 il più grande valore contenuto in dati.txt; pone nel campo b di ST1 il più piccolo valore contenuto in dati.txt; pone nel campo a di ST2 la differenza fra il più grande e il più piccolo valore contenuto
in dati.txt; pone nel campo a di ST2 il prodotto fra il più grande e il più piccolo valore contenuto in
Definire un nuovo tipo di dato chiamato VT vettore di 10 int. Scrivere in C la funzione ft che: ha in ingresso un vettore A di tipo VT già caricato e restituisce, attraverso un
opportuno parametro, un vettore di tipo VT che contiene gli stessi elementi delvettore di ingresso ma in ordine inverso; restituisce il prodotto di tutti gli elementi di A.
#include <stdlib.h> #include <stdio.h> typedef int VT[10];
E3Sintetizzare la funzione booleana f(x)=x*3 +1 dove x è un numero binario di 2 bit incomplemento a 2 e l'uscita deve essere espressa in complemento a 2 con il minor numero dibit.
X1 X0 X f(x) U3 U2 U1 U00 0 0 1 0 0 0 1
0 1 1 4 0 1 0 0
1 0 -2 -5 1 0 1 1
1 1 -1 -2 1 1 1 0
U3 = X1U2 = X0U1 = X1
U0 = -X0
E1Dato un file di testo chiamato dati.txt già esistente contenente uno per riga valori che
rappresentano numeri relativi, scrivere un programma in linguaggio C in cui si dichiarino duefile F1 e F2 che esternamente si chiameranno rispettivamente dati1.txt e dati2.txt e effettua leseguenti operazioni:
scrive su video quanti valori contiene il file dati.txt; pone in dati1.txt gli elementi di dati.txt divisibili per 7; pone in dati2.txt gli elementi di dati.txt divisibili per 5; scrive su video quanti valori contiene il file dati1.txt; scrive su video quanti valori contiene il file dati2.txt;#include <stdlib.h> #include <stdio.h> int main(){
E2Definire un nuovo tipo di dato chiamato VT vettore di 10 int. Scrivere in C la funzione ft che: ha in ingresso un vettore A di tipo VT già caricato e restituisce, attraverso un
opportuno parametro, una struct con 2 campi a e b di tipo int che contengonorispettivamente la somma degli elementi di A di posto pari e quella deglielementi di A di posto dispari; restituisce la sommatoria di tutti gli elementi di A.
#include <stdlib.h> #include <stdio.h> typedef int VT[10];typedef struct {int a, b;} SOM;
Esercizio 1 (8 punti)Scrivere un programma C che: Definisce una matrice di nome M contenente 100x100 di numeri interi e due vettori V1
e V2 entrambi contenenti 100 numeri interi. Legge da standard input una sequenza di numeri interi ed inserisce dentro M i numeri
positivi della sequenza.L’operazione di lettura termina al riempimento della matrice M. Inserisce nel vettore V1 gli elementi di M che sono numeri pari e nel vettore V2 gli
elementi di M che sono numeri dispari. L’operazione termina al riempimento dei duevettori o quando la matrice ha esaurito i suoi elementi.
Esercizio 2 (6 punti)Definire un tipo di dato ST, struct con tre campi di nome A, B di tipo int e C di tipo float.Definire un tipo di dato VT, vettore di 100 elementi di tipo int. Scrivere una funzione che ha iningresso x di tipo VT e restituisce come uscita una struct di tipo ST contenente nel campo A ilminimo, nel campo B il massimo e nel campo C la media aritmetica degli elementi di x.
dove nella relazione Nazioni l’attributo NomeStato è la chiave primaria. Nella relazioneAeroporti gli attributi NomeAereoporto e Nazione formano la chiave primaria mentrel’attributo Nazione è chiave esterna per le relazione Nazioni.
Scrivere le interrogazioni SQL che permettono di: visualizzare il nome dell’aeroporto con il maggior numero di movimenti annui, aumentare del 5% il valore dell’attributo MovimentiAnnui di tutte le tuple della relazione
Aeroporti il cui valore dell’attributo Nazione è “Italia”, per ogni nazione, visualizzare quanti aeroporti possiede.
SELECT Nazione, COUNT(*) AS ‘Totale Aeroporti’FROM AeroportiGROUP BY Nazione
Esercizio 1 (8 punti)Scrivere un programma C che: Definisce una matrice di nome M contenente 2x100 (due righe e 100 colonne) di
numeri interi ed un vettore V contenente 1000 numeri interi. Legge da standard input una sequenza di numeri interi ed inserisce dentro V i numeri
pari della sequenza.L’operazione di lettura termina al riempimento del vettore V. Inserisce nella prima riga della matrice M numeri positivi contenuti nel vettore V e nella
seconda riga di M i numeri negativi contenuti nel vettore V. L’operazione termina alriempimento di entrambe le righe di M o quando il vettore V termina.
Esercizio 2 (6 punti)Definire un tipo di dato ST, struct con tre campi di nome A, B di tipo int e C di tipo float.
Definire un tipo di dato VT, vettore di 100 elementi di tipo int. Scrivere una funzione che ha iningresso x di tipo VT e restituisce come uscita una struct di tipo ST contenente nel campo Ala somma, nel campo B il prodotto e nel campo C la media aritmetica degli elementi di x.
#include<stdio.h> #include<stdlib.h>
#define DIM 4typedef struct{int A,B; float C;} ST;typedef int VT[DIM];
ST fh(VT x, ST *rit){int i;rit->A=rit->B=rit->C=x[0];
dove nella relazione Nazioni l’attributo NomeStato è la chiave primaria. Nella relazioneAeroporti gli attributi NomeAereoporto e Nazione formano la chiave primaria mentre
l’attributo Nazione è chiave esterna per le relazione Nazioni.
Scrivere le interrogazioni SQL che permettono di: visualizzare il nome dell’aeroporto con il minor numero di movimenti annui, diminuire del 5% il valore dell’attributo MovimentiAnnui di tutte le tuple della relazione
Aeroporti il cui valore dell’attributo Nazione è “Stati Uniti”, per ogni nazione, visualizzare i nomi degli aeroporti che possiede.
Sintetizzare la funzione booleana che ha in ingresso tre cifre binarie che rappresentano un numero incomplemento a due e che produce in uscita il quoziente (intero) del numero in ingresso diviso 2.L'uscita è rappresentata in complemento a 2 con il numero minore di cifre possibili.
E2Una matrice quadrata M è detta matrice identità se tutti gli elementi della diagonale principalevalgono 1 e tutti gli altri valgono 0. Ad esempio, la seguente è una matrice identità.
1 0 0 00 1 0 00 0 1 0
0 0 0 1
Scrivere una funzione di nome Identita con un parametro formale di nome M di tipo matrice didimensione 10x10.Attraverso un parametro formale di tipo opportuno la funzione deve restituire:1.5, se M è una matrice identità;la quantità di elementi diversi da zero presenti in M, altrimenti.
E3I dati relativi ad aeroporti sono stati organizzati in tre tabelle. La prima, Nazioni, riporta unelenco di nazioni, dove di ogni nazione sono memorizzati alcuni dati; la seconda, Aeroporti,memorizza, per ogni aeroporto, alcuni dati; la terza, MovimentiAnnui, riporta il movimentopasseggeri per ogni aeroporto ed ogni anno. In particolare gli schemi sono i seguenti:
dove nella relazione Nazioni l’attributo idNazione è la chiave primaria. Nella relazioneAeroporti l'attributo idAeroporto è la chiave primaria mentre l’attributo idNazione è chiaveesterna per la relazione Nazioni. Nella relazione MovimentiAnnui gli attributi idAeroporto eanno formano la chiave primaria e idAeroporto è chiave esterna per la relazione Aeroporti.
Scrivere le interrogazioni SQL che permettono di: stabilire il numero totale di passeggeri degli aereoporti che stanno nella nazione di
nome Italia nell'anno 2008; select sum(nroPasseggeri)from MovimentiAnnui,Nazioni,Aeroportiwhere MovimentiAnnui.idAeroporto=Aeroporto.idAeroporto AND
Nazioni.idNazione=Aeroporti.idNazione and nome=’Italia’ and anno=2008;
stabilire idAeroporto e NomeAeroporto di quegli aeroporti che hanno il numero minimo
di passeggeri;
select Aeroporti.idAeroporto, NomeAeroportofrom Aeroporti,MovimentiAnnuiwhere NroPasseggeri= (select min(NroPasseggeri) from
MovimentiAnnui) and Aeroporti.idAeroporto= MovimentiAnnui.idAeroporto
inserire nella relazione di schema
TopMovimenti(idAeroporto, NomeAeroporto, anno)idAeroporto, NomeAeroporto, anno degli aeroporti che hanno trasportato il massimo
numero di passeggeri.
Insert into TopMovimenti(select Aeroporti.idAeroporto, Nome Aeroporto,annofrom Aeroporti,MovimentiAnnuiwhere NroPasseggeri= (select max(NroPasseggeri) from
MovimentiAnnui) and Aeroporti.idAeroporto= MovimentiAnnui.idAeroporto)
Scrivere un programma C che dato un intero n stampi a video il valore della seguentesommatoria. Non è ammesso usare la funzione pow della libreria matematica del linguaggioC.
#include<stdio.h> #include<stdlib.h> int main(void){int i,j,n,num,pot;double s; scanf("%d",&n);s=0;pot=1;for(i=1;i<=n;i++){
E2Una matrice M è detta di Incidenza se ogni sua colonna contiene esattamente due valori paria uno ed il valore zero altrove. Ad esempio, la seguente è una matrice di Incidenza:
Scrivere una funzione di nome Incidenza con un parametro formale di nome M di tipo matrice
di int di dimensione 10x10. Attraverso un valore di ritorno la funzione deve restituire:1, se M è una matrice di incidenza;la frequenza del numero 0 altrimenti.
#include<stdio.h>
#include<stdlib.h>
int Incidenza(int M[10][10]){int i,j,totZero,totUno,flag;
flag=1;for(i=0;i<10;i++){
totZero=totUno=0;for(j=0;j<10;j++){
if(M[i][j]== 0) totZero++;else if (M[i][j]==1) totUno++;
}if (totUno != 2 || totZero!= 8) flag=0;}
if (flag==1) return 1;
else{ totZero=0;for(i=0;i<10;i++){
for(j=0;j<10;j++){if(M[j][i]== 0) totZero++;
}}return totZero;
}}
E3 (6 punti)I dati relativi a ricette di cucina sono stati organizzati in tre tabelle: la tabella Ricette contienel’elenco delle ricette e specifica anche il cuoco che l'ha inventata; la tabella Ingredienticontiene i diversi ingredienti che compongono le ricette; la tabella Cuochi contiene datianagrafici relativi a cuochi che hanno inventato ricette. In particolare gli schemi di relazionesono:
dove nella relazioneCuochi l'attributo IdCuoco è la chiave primaria. Nella relazione Ricette l’attributo IdRicetta èla chiave primaria e l'attributo IdCuoco è chiave esterna per la relazione Cuochi. Nellarelazione Ingredienti gli attributi IdRicetta e Ingrediente formano la chiave primaria, mentrel’attributo IdRicetta è chiave esterna per le relazione Ricette.
E3Un’agenzia immobiliare per la sua gestione utilizza, fra le altre, le seguenti relazioni (gliattributi che formano la chiave sono indicati in neretto):
SELECT CFProprietarioFROM ImmobileProprietarioWHERE IdImmobile IN (
SELECT IdImmobileFROM ImmobileProprietarioGROUP BY IdImmobileHAVING count(*) > 1
))
CFVisitatore
EEE
AAA
E1.Il file valori.txt contiene per ogni riga due numeri interi.
Scrivere un programma che legge il contenuto del file valori.txt e scrive sul file
rivisti.txt tutte le righe di valori.txt tali che il primo valore è pari ed il secondo
dispari. Al termine dell'elaborazione il programma deve visualizzare (mostrare a video) ilnumero di righe lette da valori.txt e quelle scritte su rivisti.txt.
E3Un’agenzia immobiliare per la sua gestione utilizza, fra le altre, le seguenti relazioni (gliattributi che formano la chiave sono indicati in neretto):
Immobile(Id, Dati Catastali, Citta, via, numCivico, piano, prezzoRichiesto)
WHERE Id = IdImmobile AND citta = 'Milano'GROUP BY CFProprietarioHAVING count(DISTINCT via) > 1
CFProprietario
BBB
SELECT CFVisitatoreFROM Visitatore
WHERE CFVisitatore IN (SELECT CFProprietarioFROM ImmobileProprietario)
CFVisitatore
AAA
EEE
E1Siano dati due file di testo denominati dati1.txt e dati2.txt e un vettore di double di 20 elementidenominato VtD con valore iniziale pari a -1. Supponendo che dati1.txt contenga, uno per rigadei numeri interi maggiori di 0, e dati2.txt, sempre uno per riga, dei numeri decimali e checontengano entrambi lo stesso numero di elementi, scrivere il programma che svolge iseguenti compiti: legge in parallelo un valore dal file dati1.txt lo pone nella variabile N e calcola il valore
della seguente espressione:
quindi legge l'elemento nella stessa posizione del file dati2.txt e pone 1 in VtD se ilvalore letto da dati2.txt è uguale al valore dell'espressione, 0 altrimenti. La letturatermina o con la fine dei file o dopo 20 elementi; dopo aver caricato VtD stampa i valori di dati1.txt per i quali il valore in VtD è 1.
E2Definire un nuovo tipo di dato chiamato ST formato da due campi A e B il primo di tipo doubleed il secondo di tipo int. Scrivere la funzione ft che ha in ingresso un parametro K di tipo ST eche:
restituisce, attraverso un opportuno parametro, un vettore di 20 elementi di tipo ST incui tutti gli elementi sono uguali a K, restituisce il valore massimo fra il campo A e B di K.
#include <stdio.h> #include <stdlib.h>
typedef struct {double A; int B;} ST;double ft(ST K, ST vt[]){ int i;for(i=0; i<20; i++)vt[i] = K;
if (K.A > K.B)return K.A;
elsereturn K.B;
}
int main() //NON RICHIESTO DAL TESTO{ ST v[20], el={2.45, -7};
printf("%lf\n",ft(el,v));
system("pause"); return 0;}
E3Sintetizzare la funzione booleana f(x)=x/2 + 1 dove x è un numero binario senza segno di 2