ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI 17/07/2003 - C++
1. Gli sportelli di un ufficio postale sono rappresentabili mediante un array SP a valori interi dove ciascun elemento dellarray rappresenta uno sportello aperto e il valore relativo il numero di clienti in attesa a quello sportello.
Si definisca una classe UP assumendo che le possibili operazioni siano:
- UP(n): costruttore che crea un array con elementi inizialmente tutti uguali a zero di dimensione n (n=10 per default);
- Nuovo_cliente(sp): aggiunge un cliente in attesa allo sportello sp
- ok=Avanti_il_prossimo(sp): se il numero di persone in attesa allo sportello sp non è nullo viene decrementato il valore relativo restituendo true, la funzione restituisce false altrimenti;
- ~UP: distruttore.
2. Sia dato un file personale.txt non vuoto dove in ciascuna riga sono presenti i seguenti dati: il cognome di una persona (al più 20 caratteri), il suo indirizzo di e-mail (al più 20 caratteri), letà (intero) e il numero della stanza dove si trova il suo ufficio (intero). Si scriva una funzione estrai(ns) che stampa sul monitor il nome della persona che lavora nella stanza numero ns e che, nel caso in cui in quella stanza lavori più di una persona, sia il più anziano.
3. Sia data una lista semplice a valori interi l, si scriva una funzione estrai(l) che riceve in ingresso la lista ed elimina dalla lista tutti gli elementi che hanno il campo informativo maggiore del campo informativo del primo elemento.
4. Dati i numeri decimali A=-69, B=56 e C=-96, 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 loperazione D=A-B e si discuta se il risultato ottenuto è o no significativo.
Punteggio:
Es.1 |
Es.2 |
Es.3 |
Es.4 |
10 |
10 |
10 |
3 |
1.
//Up.h
class UP
{
int *SP;
public:
UP(int
n);
UP();
void nuovo_cliente(int s);
boolean avanti_il_prossimo(int s);
~UP();
//UP.cc
#include UP.h
UP::UP(int
n) {
SP=new
int[n];
for (int
h=0; h<n; h++)
SP[h]=0;
}
UP::UP()
{
SP=new
int[10];
for (int
h=0; h<10; h++)
SP[h]=0;
}
void
UP::nuovo_cliente(int s)
{
SP[s]++;
}
boolean
UP::avanti_il_prossimo(int s)
{
if(SP[s]==0)
return false;
SP[s]--;
return
true;
}
UP::~UP()
{
delete []
SP;
}
2.
#include <fstream.h>
#include <string.h>
void estrai(int sn)
{
int rn;
int eta;
char nome[21];
char email[21];
char nome_e[21];
int eta_e;
fstream leggi;
leggi.open(personale.txt, ios::in);
eta_e=-1;
while(leggi>>nome>>email>>eta>>rn)
{
if (rn==sn && eta>eta_e)
{
strcpy(nome, nome_e)
eta_e=eta;
}
if(eta_e>-1)
cout<<nome_e;
}
3.
void (elem *l)
{
int pe;
elem *aux;
if(l==0) return;
aux=l;
pe=aux->info;
aux=l->next;
aux1=l;
while(aux!=0)
{
if(aux->info<=pe)
{
aux=aux->next;
aux1=aux1->next;
}
else
{
aux1->next=aux->next;
delete aux;
aux=aux1->next;
}
}