ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/01/2005 - C++
1.
Un parcheggio per automobili è rappresentabile mediante un
array P a valori binari dove
ciascun elemento dell’array rappresenta un posto auto nel parcheggio e il
corrispondente valore indica se il posto auto è libero oppure no.
Si definisca una classe Parcheggio
assumendo che le possibli operazioni siano:
- Parcheggio(n): costruttore che crea un parcheggio con n (n=100 per default) posti auto inizialmente liberi.
- assegna(i): se il posto auto corrispondente all’indice i è libero, lo rende occupato restituendo true, altrimenti restituisce false.
- libera(i): rende libero il posto auto corrispondente all’indice i
- numero_liberi(): restituisce il numero dei posti auto liberi nel parcheggio;
-
~Parcheggio(): distruttore.
2.
Dato un file esterno numeri.dat non vuoto, si scriva una funzione crea_SM() che calcola la
media aritmetica m dei
valori contenuti in numeri.dat
e crea un nuovo file numeri_SM.dat
composto dai valori di numeri.dat
superiori a m.
3.
Data una lista semplice circolare a valori interi l, si scriva una funzione inserisci(l) che riceve in
ingresso la lista l e
esegue le seguenti azioni:
- conta il numero (n) di
elementi contenuti in l;
- se non esiste alcun elemento in l con campo informativo uguale a n, ne crea uno e lo inserisce in testa.
4. Dati i numeri decimali A=78, B=99 e C=-30, 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-C e si discuta se il risultato ottenuto è o no significativo.
Punteggio:
Es.1 |
Es.2 |
Es.3 |
Es.4 |
10 |
9 |
11 |
3 |
1.
//Parcheggio.h
class Parcheggio {
int *P;
int dim ;
public:
Parcheggio(int n);
Parcheggio();
boolean assegna(int i);
void libera(int i);
int numero_liberi();
~Parcheggio();
}
//Parcheggio.cpp
#include “Parcheggio.h”
Parcheggio::Parcheggio(int n)
{ dim=n;
P=new int[n];
for(int h=0; h<n; h++)
P[h]=0; }
Parcheggio::Parcheggio()
{ dim=100;
P=new int[100];
for(int h=0; h<100; h++)
P[h]=0;}
boolean
Parcheggio::assegna(int i) {
if(P[i] ==0) { P[i]=1;
return true; }
}
return false;
}
void Parcheggio::libera(int i)
{ P[i]=0; }
int Parcheggio::numero_vuoti() {
int cont=0;
for (int j=0; j<dim;
j++)
if(P[j]==0) cont++;
return cont;
}
Parcheggio:: ~Parcheggio()
{ delete [] P;}
2.
#include <fstream.h>
void crea_SM() {
fstream f, g;
f.open(“numeri.dat”, ios::in);
int num, m;
int cont=0;
n=0;
while(f>>n)
{ cont+=n;
num++;
}
m=cont/num;
f.close(),
f.open(“numeri.dat”, ios::in);
g.open(„numeri_SM.dat“, ios::out);
while(f>>num)
{ if(num>m) g<<num<<”\n”;
}
f.close();
g.close();
}
3.
void inserisci (elem *&l)
{
elem *aux, *aux1;
if (l==0) {
aux=new elem;
aux->info=0;
aux->next=aux;
l=aux;
return ;
}
int cont=1;
for(aux=l; aux->next==l;
aux=aux->next)
cont++;
aux1=l;
for(int i=0 ; i<cont ; i++)
{
if(aux1->info==cont)
return;
aux1=aux1->next;
}
aux1=new elem;
aux1->info=cont;
aux1->next=l;
aux->next=aux1;
l=aux1;
}