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;

}