ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 17/2/2000 - C++
1.
La
gamma di automobili di una casa automobilistica è composta dai seguenti
modelli: matingo, clava, fiexo, golfetta,
corassat.
Ciascun modello della gamma è disponibile in cinque colori: bianco, nero, azzurro, rosso e grigio. Un concessionario di
questa casa automobilistica è rappresentabile mediante una matrice. L’elemento (i,j) di tale matrice indica il numero di esemplari disponibili del modello
di auto i di colore j. Si definisca una classe concessionario assumendo che le possibili operazioni siano le
seguenti:
·
Init(): inizializza un
concessionario in modo che contenga un esemplare di ciascuna auto della gamma
di colore bianco.
·
Ok=vendita(mod, col): effettua una vendita di un’auto
modello mod e colore col, se presente e restituisce il valore booleano true. Se non è presente
alcuna auto di questo modello e colore, la vendita non viene effettuata e viene
restituito il valore booleano false.
·
Nuovi_arrivi (mod, col, num): fornisce al concessionario
un numero pari a num di auto di modello mod e colre col.
2.
Un
file chiamato orario_treni.txt contiene per ciascuna riga
le seguenti informazioni:
·
Un
valore intero che rappresenta il codice del treno,
·
una
stinga di al più 25 caratteri che indica la stazione di partenza,
·
una
stringa di al più 25 caratteri che indica la stazione di arrivo,
·
un
valore intero che indica l’ora di partenza,
·
un
valore intero che indica il minuto di partenza;
·
un
valore intero che indica l’ora di arrivo,
·
un
valore intero che indica il minuto di arrivo.
Si scriva una funzione veloce (p, d) che riceve in ingresso due stringhe e che visualizza sul
monitor il codice del treno che
partendo da p
arriva a d
impiegando il minor tempo. Si assuma per semplicità che nessun treno sia in
viaggio a mezzanotte.
3.
Si
scriva una funzione elimina(l) che riceve come parametro
di ingresso il puntatore ad una lista circolare doppia il cui campo
informazione contiene valori interi e che esegue le seguenti operazioni:
·
Legge
il valore n dell’elemento puntato a l e
·
dealloca
l’elemento che incontra scorrendo di n posizioni la lista.
4. Dati i numeri decimali A=-58, B=-72 e C=103, 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 eseguano le operazioni D=A+C e E=B+C e si dica se i risultati ottenuti sono o no significativi.
10 |
10 |
10 |
3 |
1)
//concessionario.h
enum booleano {F, T}
enum modello {matingo, clava,
fiexo, golfetta, corassat}
enum colore { bianco, nero,
azzurro, rosso, grigio}
const int N=5;
class concessionario {
int auto [N][N];
public:
Init();
void nuovi_arrivi (modello m, colore c, int num);
booleano vendita (modello m, colore c);
}
//concessionario.cc
#include concessionario.h
concessionario::Init() {
for (int i=0; i<N; i++)
{ auto[i][0]=1;
for (int j=1; j<N; j++)
auto[i][j]=0;
}
}
void concessionario::
nuovi_arrivi (int num, modello m, colore c)
{
auto [m][c] += num;
}
booleano concessionario:: vendita
(modello m, colore c)
{
if (auto [m][c]>0)
{
auto[m][c]--;
return T; }
return F;
}
2)
#include <fstream.h>
#include <string.h>
void veloce (char p [25],
char d[25])
{
fstream scorri;
char partenza[25], destinazione[25];
int
h_par, h_arr, min_par, min_arr;
int
tempo_minore = 1440;
int
min, h, cod, codice_treno;
scorri.open(“orario_treni.txt”,
ios::in);
scorri
>>cod>>partenza>>destinazione>>h_par>>min_par>>h_arr>>min_arr;
while(!scorri.eof())
{
if ((strcmp(partenza, p)==0) && (strcmp(dest,
d)==0)
{
if (min_par<=
min_arr)
{
min=min_arr-min_par;
h = h_arr-h_par;
}
else
{
min = 60 – (min_par-min_arr);
h = h_arr-h_par –1;
}
tempo = (60*h) + min;
if (tempo < tempo_minore)
{
tempo_minore = tempo;
codice_treno=cod;
}
}
scorri
>>cod>>partenza>>destinazione>>h_par>>min_par>>h_arr>>min_arr;
}
cout << cod
<< “\n”;
}
3)
struct elem {
int n;
elem* prec;
elem* succ;
}
void elimina (elem*& l)
{
elem
* aux;
int n;
if (l==0)
{
cout<<”Lista vuota: errore\n”;
return;
}
n=l->info;
aux=l;
for (int i=0; i<n; i++)
aux = aux->succ;
if (aux==l)
l = l->succ;
aux->prec->succ = aux->succ;
aux ->succ-prec = aux ->prec;
delete aux;
}