ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/1/2000 - C++
1. Un noleggio di automobili dispone di un parco macchine composto da N tipi diversi di auto ed esistono M esemplari di ciascun tipo di auto.
Questo noleggio è pertanto rappresentabile mediante una matrice NxM, il cui generico elemento (i,j) indica se il j-esimo esemplare di auto del tipo i-esimo è stato noleggiato oppure se è disponibile.
Si definisca una classe Rent assumendo che le possibili operazioni siano le seguenti:
· Rent (); inizializza il noleggio in modo tale che tutte le auto siano disponibili
· ok = Noleggio(car); determina se è disponibile almeno un esemplare di auto di tipo car e nel caso la noleggia;
· restituzione (i,j); rende di nuovo disponibile il j-esimo esemplare di auto del tipo i-esimo;
· n=disponibili (); restituisce il numero complessivo di auto ancora disponibili
2.
Si scriva una funzione elem* parole_in_lista () che legge un insieme di parole
contenute nel file “dizionario.txt” e costruisce una
lista semplice composta da tanti elementi quante sono le parole del file
ciascuno dei quali ha nel campo informazione la stringa corrispondente. La
funzione restituisce il puntatore alla lista creata.
3. Data la lista costruita nell’esercizio 2, si scriva una funzione conta_occorrenze (lista_parole) che riceve in ingresso il puntatore alla lista e conta le occorrenze di ciascuna parola della lista all’interno di un file di testo chiamato “testo.txt”. La funzione visualizza sul monitor i conteggi finali.
4. Data la seguente mappa di Karnaugh si determini il valore delle uscite “non specificate” in modo da ottenere la forma minima ottimale.
|
1 |
- |
- |
|
1 |
1 |
- |
10 |
10 |
10 |
3 |
//Rent.h
enum auto {D, A};
const int N=10;
const int M=20;
class Rent {
auto parco_macchine [N][M];
public:
void Rent () {
for (int i=0; i<N; i++)
for (int j=0; j<M; j++)
parco_macchine
[I][j] = D; }
auto
Noleggio (int i);
void Restituzione (int x, int y) {
parco_macchine
[x][y] = D;}
int
disponibili ();
}
//Rent.cc
#include
“Rent.h”
auto
Rent:: Noleggio (int x) {
auto car = D;
int j=0;
while ((j<M) &&
(car == A))
{
if
(parco_macchine [i][j]==D) { parco_macchine [i][j] = A;
car = A;
}
j++;}
return car;}
int Rent::disponibili () {
int num=0;
for (int i=0; i<N; i++)
for (int j=0; j<M; j++)
if
(parco_macchine [i][j]==D) num++;
return num;
}
#include <fstream.h>
# include <string.h>
struct elem {
char* voce;
elem* next;};
elem* parole_in_lista()
{
fstream leggi;
char *parola;
elem *lista=0;
elem *supporto;
leggi.open(“dizionario.txt”, ios::in);
leggi >> parola;
while (!leggi.eof())
{
supporto =new elem;
strcpy (supporto->voce, &parola[0]);
supporto->next = lista;
lista = supporto;
leggi>>parola;
}
leggi.close();
return lista;
}
#include <fstream.h>
# include <string.h>
const int N=10; //dimensione nota della lista
‘lista_parole’
int conta_occorrenze (elem
*lista_parole)
{
fstream testo;
char
*vocabolo;
elem
*scorri;
int num=0;
int i=0;
testo.open (testo.txt”,
ios::in);
int occorrenze[N];
for (int j=0; j<N; j++)
occorrenze[j]=0;
testo
>> vocabolo;
while (!testo.eof())
{
i=0;
for
(scorri=lista_parole; scorri !=0; scorri = scorri->next)
{
if
(strcmp(scorri->voce, &vocabolo[0])==0)
{
occorrenze[i]++;
break;
}
i++; }
testo>>vocabolo;
}
for (i=0; i<N; i++)
{
cout << “il numero di occorrenze della parola numero “ << i
<< “sono “ << occorrenze[i] << “/n”;
cont += occorrenze[i];
}
testo.close();
return cont;
}