ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 3/2/2000 - C++
1. Una Ditta dispone di diversi magazzini dislocati in alcune città. Sia dato un file chiamato disponibilità.txt che in ciascuna riga contiene le seguenti informazioni:
· un valore intero che identifica un pezzo di ricambio,
· una stringa di lunghezza massima 25 caratteri che identifica la sede di un magazzino e
· un valore intero che indica quanti esemplari del pezzo di ricambio sono presenti in quel magazzino.
Si scriva una funzione fornitura (pezzo, quantità) che cerchi quale magazzino ha una disponibilità dell’elemento pezzo più prossima (ma non inferiore) al valore quantità.
2. Sia data la
matrice M1 di
dimensione NxM e la matrice M2
di dimensione RxN entrambe di valori interi. Si scriva una funzione ok=controlla(M1, M2) che controlla
se la somma degli elementi di ciascuna riga di M1 é uguale alla somma degli elementi della corrispondente
colonna di M2 e restituisce
il relativo risultato.
3. Si consideri un mazzo di carte da gioco rappresentato mediante una lista di elementi che contengono l'informazione relativa al segno ed al valore di una carta. Si definiscano le opportune strutture dati e si scriva una funzione estrai_se_uguale(p, n, s) che estrae (senza elimlinarla) dal mazzo l’n-esima carta se il seme di questa è uguale a s e restituisce il puntatore alla carta estratta se ciò e avvenuto altrimenti il restituisce il puntatore nullo.
4.
Dati i numeri decimali A=66, B=-62 e C=125, si determini il
minimo numero di bit necessari per rappresentare contemporaneamente i suddetti
numeri in complemento a 2 e se ne dia la rappresentazione. Utilizzando poi lo
stesso numero di bit, si esegua l’operazione D=B-A e si dica se il risultato
ottenuto è o no significativo.
10 |
9 |
11 |
3 |
# include <fstream.h>
#include <limits.h>
#include <string.h>
void fornitura (int pezzo,
int quantita)
{
fstream f,
int
code, price, diff;
char
sede[25];
char
sede_ok[25];
int
trovato = 0;
int
diff_ok = MAX_INT;
f.open
(“disponibilità.txt”, ios::in);
while(!f.eof())
{
f >> code >> price
>> quanti ;
if ((code == elemento) && (quanti >=
quantità))
{
diff = quanti – quantità;
if (diff < diff_ok)
{
diff_ok=diff;
trovato++;
strcpy(sede_ok,
sede);
}
}
}
if (trovato >0)
cout<<”Il magazzino è quello di
“<<sede_ok<<”\n”;
else
cout<<”Non è
stato trovato alcun magazzino \n”;
f.close();
}
booleano {F, T};
booleano controlla (int
M1[N][M], int M2 [R][N]))
{
int i, j, k;
int cont1=0,
int cont2=0;
for (i=0; i<N; i++)
{
for
(j=0; j<M; j++)
cont1+=M1[i][j];
for (k=0; k<R, k++)
cont2 += M2[k][i];
if (cont1!=cont2)
{ok=0;
break;
}
}
if (ok) return T;
else return F;
}
enum seme {cuori, quadri,
fiori, picche};
enum valore {A,2, 3, 4, 5,
6, 7, 8, 9, 10, J, Q, K}
struct carta { valore val;
seme s;
carta *succ;}
carta* estrai_se_uguale
(carta *&mazzo, valore n, seme s)
{
int i= 1;
carta*p
=mazzo;
carta
*q;
if
(mazzo == 0) return 0;
while
((p !=0) && (i<n)) {
i++;
q=p;
p = p->pun;
}
if (p==0) return 0;
if ((n == 1)&&(mazzo->seme==s))
{
mazzo = mazzo->succ;
return p;
}
else if(p->seme==s)
{
q->succ = p->succ;
return
p;
}
return 0;
}