ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 21/07/2005 - C++
1.
Una
lista di attesa può essere rappresentata mediante una lista semplice a valori
interi dove ciascun elemento rappresenta una persona in attesa (non esistono
quindi elementi duplicati all’interno della lista). Si definisca una classe waiting_list sulla quale sono possibili le seguenti operazioni:
-
Waiting_list(): costruttore che crea una
lista vuota;
-
in_attesa
(info):
inserisce un elemento con campo informativo uguale a info in
fondo alla lista;
-
boolean
out_attesa():
se la lista non è vuota, elimina dalla lista il primo elemento restituendo T, altrimenti restituisce F;
-
~waiting_list(): distruttore che dealloca
la lista.
2.
Sia
dato il file insieme_numeri.dat
che contiene un
elenco di numeri interi tutti diversi fra loro. Si scriva una funzione booleana
verifica(M) che riceve in ingresso una
matrice M di interi di dimensione NxN e verifica che tutti gli elementi di M siano contenuti nel file insieme_numeri.dat (in questo caso restituisce true, altrimenti restituisce false).
3.
Dati
un array A1 a valori interi di dimensione N, si scriva una funzione
stampa_in_ordine(A1) che riceve in ingresso l’array A1 e stampa sul monitor
l’elemento più grande e quello più piccolo in esso contenuti.
4. Dati i numeri decimali A=113, B=41 e C=-86, 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 |
11 |
10 |
9 |
3 |
1.
//waiting_list.h
class
waiting_list {
elem* l;
public:
waiting_list() {l=0};
void in_attesa (int info);
boolean
out_attesa ();
~waiting_list();}
//waiting_list.cc
#include
"waiting_list.h"
void
waiting_list::in_attesa(int n)
{
elem* aux;
if (l==0) {
l=new
elem;
l->info=n;
l->next=0;
return;}
for (aux=l;
aux->next !=0 ; aux=aux->next)
;
elem
np;
new
elem np ;
np->info = n;
np ->next=0;
aux->next=np
}
bool
waiting_list::out_attesa ()
{ elem* aux=l;
if (l==0) return F;
l=l->next;
delete aux;
return T;}
waiting_list::~waiting_list()
{
elem*
aux=l;
while
(aux!=0) {
l=l->next;
delete
aux;
aux =
l;}
}
2.
#include
<fstream.h>
const
int N=9 ;
boolean
verifica (int M[N][N])
{ boolean ok=false;
int n;
fstream f ;
for(int i=0 ; i<N ; i++)
for(int j=0; j<N; j++)
{ f.open(« insieme_numeri.dat »,
ios ::in) ;
while(f>>n) if(n==M[i][j])
{ ok=true;
break;
}
if(!ok)
return false;
ok=false;
f.close();
}
return
true;
}
3.
#include
<iostream.h>
const
int N=10 ;
void stampa_in_ordine (int A1[N])
{
int
min, max;
max=A1[0];
min=A1[0];
for(int i=1; i<N; i++) {
if(A1[i]>max) max=A1[i];
if(A1[i]<min) min=A![i];
}
cout<<max;
cout<<min;
}