ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 02/02/2004 - C++

 

1.      Un parcheggio multilivello è rappresentabile mediante una matrice P a valori booleani di dimensione NxM. N rappresenta il numero di livelli del parcheggio e M il numero di posti auto di ciascun livello. Si definisca una classe Park ogni oggetto della quale rappresenta un parcheggio. Sugli oggetti di tale classe è possibile effettuare le seguenti operazioni:

2.      Sia dato un file persone.txt che contiene per ciascuna riga una stringa di al più 24 caratteri e un valore intero che rappresentano rispettivamente il nome e l’età di una persona. Si scriva una funzione nuovo_elenco() che crea un nuovo file n_persone.txt che contiene tutte le righe di persone.txt ad eccezione di quelle che corrispondono alle persone di età minima.
 

3.      Sia data una lista semplice l i cui elementi hanno due campi informativi, info_int di tipo intero e info_car di tipo char. La lista l è ordinata in senso crescente prioritariamente  in base al valore del campo info_int e secondariamente in base al valore del campo info_car. Si scriva una funzione inserisci(l, n, x) che riceve in ingresso la lista l, un valore intero n e un carattere x e inserisce un nuovo elemento in l con campo info_int uguale a n e campo info_car uguale a x mantenendone l’ordinamento.            

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

10

10

10

3

 

1.

//Park.h

const int N=5;

const int M=40;

 

class Park {

                boolean P[N][M];

public:

                boolean ingresso ();

                void uscita (int i, int j);

                int  posti_liberi();

                Park();

}

 

//Park.cc

 

# include “Park.h”

#include <iostream.h>

 

Park::Park()

{

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

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

                               P[i][j]=false;

}

 

boolean Park:: ingresso () {

for(int i=N-1; i>=0; i--)

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

                if(P[i][j]==false)

                {              P[i][j]=true;

return true;

}

return false;

}

 

void Park::uscita(int i, int j)

{

if ((i<0) || (i>N-1) || (j<0) || (j>M-1))

{

cout << “indici posto sbagliati\n”;

return;

}

P[i][j]==false;

}

 

int Park::posti_liberi() {

int conta=0;

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

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

                               if (P[i][j]) conta++;

cout<<”numero posti liberi: “<<conta<< “\n”;

 }

 

2.

#include <fstream.h>

 

void nuovo_elenco()

{

fstream leggi, scrivi;

 

char nome[25];

int eta, eta_min;

leggi.open(“persone.txt”, ios::in);

scrivi.open(“n_persone.txt”, ios::out);

if (leggi>>nome>>eta)

eta_min=eta;

else

{           scrivi.close();

            return;

}

while(leggi>>nome>>eta)

            if(eta<eta_min)

                        eta_min=eta;

 

leggi.close();

leggi.open(“persone.txt”, ios::in);

 

while((leggi>>nome>>eta)

            if(eta>eta_min)

                        scrivi<<nome<<eta;

scrivi.close(),

leggi.close();

}

 

 

3.

struct elem

{           int info_int;

            char info_char;

            elem* next;       };

 

void inserisci(int n, char x, elem *&l)

{

elem *aux, *aux1, *aux2;

aux2=new elem ;

aux2->info_int=n;

aux2->info_car=x ;

           

if(l==0) {            aux2->next=0;

                        l=aux2;

                        return;

}

if(l->info_int>v || (l->info_int==n && l->info_car>x))           // inserimento in testa

{           aux2->next=l;

            l=aux2 ;

            return,

}

 

for(aux=l ; (aux->info_int<n || (aux->info_car<x && aux->info_int==n) && aux !=0) ; aux=aux->next)

aux1=aux ;

 

aux2->next= aux ;

aux1->next = aux2 ;

}