ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 17/02/2005 - C++

 

 

1.   Si definisca una classe che rappresenta una lista di attesa con priorità FIFO (First In First Out).  La lista di attesa è rappresentabile mediante una lista semplice i cui elementi hanno nel campo informativo una stringa di lunghezza massima 24 caratteri. Le possibili operazioni sono:

  L_A(): costruttore che crea una lista vuota;

  in_attesa(nome): se non esiste alcun elemento con il campo informativo uguale a nome viene inserito un nuovo elemento in coda alla lista e si restituisce true, altrimenti la lista non viene modificata e si restituisce false;

  chiamata(): se la lista non è vuota, elimina l’elemento in testa alla lista;

  ~L_A(): distruttore che dealloca la lista.  

2.   Un file chiamato numeri.dat contiene un insieme di valori interi positivi. Scrivere una funzione booleana cerca() che cerca nel file i valori multipli di 3. Se il file contiene almeno un multiplo di 3 la funzione stampa il più grande multiplo di 3 e restituisce  True, altrimenti restituisce False.       

3.      Sia data una matrice M di dimensione NxN a valori interi maggiori di zero. Si scriva una funzione non_nulle(M) che riceve in ingresso la matrice M e restituisce il numero totale di righe di M che hanno almeno un valore diverso da zero.  
  

4.    Dati i numeri decimali A=111, B=-88 e C=-59, 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

9

10

3

 


1.

//L_A.h

struct elem {

        char* nome;

        elem * next; };

 

class L_A {

                elem* l;

        public:

                L_A() {l=0;};

                boolean in_attesa (char nome[25]);

                void chiamata ();

                ~L_A(); }

 

//L_A.cc

#include <string.h>

#include "L_A.h"

 

boolean  L_A:: in_attesa(char nome[25])

{

elem *aux, *aux1;

if(l==0) {          aux=new elem ;

                         strcpy(aux->info, nome);

                         aux->next =0;

                         return true; }

 

aux=l->next;

aux1=l ;

boolean trovato=false ;

 

while(aux !=0)

{

if(strcmp(aux->nome, nome)==0)

         trovato=true;

  aux1=aux;

  aux=aux->next;

}

if(trovato) return false ;

aux=new elem;

strcpy(aux->info, nome);

aux->next=0;

aux1->next=aux ;

return true ;

}

 

void L_A::chiamata()

{

        if (l==0) return;

elem *aux ;

aux=l ;

l=l->next;

        delete aux;}

 

L_A::~L_A() {

elem* aux=l;

while (aux!=0) {

l=l->next;

delete aux;

aux = l;

}

}

 

 

 

2.

 

#include <fstream.h>

 

 

bool cerca(int n)

{

fstream f;

 

int num;

int n_max=0;

 

f.open (“numeri.dat”, ios::in);

 

while(f>> num)

{

        if (num%3==0)

        {

           if(num>m_max) n_max=num;

        }

}

f.close();

if (n_max>0)  {

cout<<n_max;

return true; }

return false;

}

 

 

3.

 

const int N=26;

 

int non_nulle(int M[N][N])

{

        int cont=0 ;

        int cont_R=0 ;

 

for(int i=0; i<N; i++)

        {

            for(int j=0; j<N; j++)

                           cont+=M[i][j];

            if(cont>0)

                           cont_R++;

            cont=0;

        }

return cont_R;

}