ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 11/07/2002 - C++
1. Il sacchetto del gioco della tombola è rappresentabile mediante una lista semplice di 90 elementi diversi fra loro con campo informativo intero che va da 1 a 90. Si definisca una classe estrazione ogni oggetto della quale rappresenta un sacchetto della tombola. Sugli oggetti di tale classe sono possibili le seguenti operazioni:
- estrazione(): costruttore che crea un sacchetto della tombola;
- OK=estrai(n): la funzione elimina, se presente, l’elemento con campo informativo uguale a n e restituisce T, restituisce F se l’elemento non è presente nella lista;
- OK=Info(n): la funzione restituisce T se l’elemento con campo informativo uguale a n è presente nella lista, F altrimenti;
- ~estrazione(): distruttore che dealloca la lista.
2. Dato un file numeri.txt composto da insieme di almeno due numeri interi. Si scriva una funzione cerca_min() che legge il file e stampa sul monitor i due valori più piccoli contenuti in esso.
3. Si scriva una funzione controlla_matrici(M[N][N])
che riceve in ingresso una matrice di dimensione NxN a valori interi e restituisce T se tale matrice ha la
struttura rappresentata in figura, F altrimenti
4. Dati i numeri decimali A=72, B=-39 e C=131, 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.
Punteggio:
Es.1 |
Es.2 |
Es.3 |
Es.4 |
12 |
10 |
8 |
3 |
1.
//estrazione.h
struct
elem { int info;
elem* next;}
class
estrazione {
elem* l;
public:
estrazione();
bool
estrai (int n);
bool
info (int n);
~estrazione();}
//estrazione.cc
#include "estrazione.h"
estrazione::estrazione()
{
elem
*aux;
elem
*aux1;
l = new elem;
l->info = 1;
l->next=0;
aux=l;
for(int i=2; i<91; i++)
{
aux1=new elem;
aux1->info=i;
aux1->next=0;
aux->next=aux1;
aux=aux1 ;
}
}
bool
estrazione::estrai(int n)
{
elem *aux,
*aux1;
aux=l ;
if(l==0)
return F;
if(l->info==n)
{
l=l->next;
delete aux;
return T;
}
aux1=aux;
for(aux=l->next;
aux!=0, aux=aux->next)
{
if(aux->info==n)
{
aux1->next=aux->next ;
delete aux ;
return T ;
}
aux1=aux ;
}
return
F ;
}
bool estrazione::info (int n)
{
elem
*aux;
for(aux=l;
(aux!=0)&&(aux->info<=n); aux=aux->next)
if (aux->info==n) return
T ;
return
F ;
}
estrazione:: ~estrazione()
{
elem* aux=l;
while
(aux!=0) {
l=l->next;
delete
aux;
aux =
l;}
}
2.
#include <fstream.h>
void
cerca_min()
{
fstream f;
int letto,
min1, min2;
f.open
(“numeri.dat”, ios::in);
f >>
min1;
f>>letto;
if
(letto<min1)
{
min2=min1;
min1=letto;
}
else
min2=letto;
while
(f>> letto) {
if (letto < min1)
{ min2 = min1;
min1 = letto; }
else if (letto <min2) min2=letto;
}
cout<<”i due valori più
piccoli sono:\n”<< min1 << “e\t” << min2;
f.close();
}
3.
const int N=20;
bool controlla_matrice (int M[N][N])
{
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
{
if(((i==j+1)&&(M[i][j]!=I))
|| ((i==j-1)&&M[i][j]!=j))(
return F;
if(((i!=j+1) ||(i!=j-1))
&& (M[i][j]!=0))
return F;
}
return T;
}