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;

}