ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/7/2000 - C++
1.
Una
macchina per la vendita di bibite in lattina ha N diversi tipi di bibite e puo’
contenere al massimo M lattine di ciascun tipo. Tale macchina puo’ essere
rappresentata mediante un array di N posizioni. Si definisca una classe bibite assumendo che le possibili operazioni siano le seguenti:
·
Ok= Vendita (int tipo): effettua, se possibile, la
vendita di una lattina di tipo tipo. La funzione restituisce il
valore corrispondente a true se la vendita e’ possibile,
false altrimenti;
·
Ok = Rifornimento (int quante, int
tipo): inserisce
nella macchina un numero di lattine di tipo tipo pari a quante. Se il numero di lattine che si vogliono inserire supera la capicita’
massima (M), il rifornimento non viene eseguito affatto e viene restituito il
valore corrispondente a false, altrimenti il rifornimento
viene eseguito e viene restituito il valore true;
·
Bibite(): inizializza la macchina in
modo che contenga M lattine di ciascun tipo;
·
Situazione(): stampa sul monitor quali
tipi di lattine sono terminate;
2.
Sia
dato il file numeri.dat che contiene un elenco di
numeri interi tutti diversi fra loro. Si scriva una funzione ok=verifica(v) che riceve in ingresso un array v di interi di dimensione N e verifica che tutti gli
elementi di v siano contenuti nel file numeri.dat ( in questo caso restituisce 1, altrimenti restituisce 0).
3.
Si
scriva una funzione matricola(l) che riceve in ingresso il
puntatore ad una lista semplice di elementi formati da due campi informativi:
una stringa che rappresenta il cognome di uno studente ed un valore intero che
ne rappresenta il numero di matricola. La funzione legge da tastiera il numero
di matricola di uno studente e ricerca nella lista l’elemento che ha il campo
informazione relativo alla matricola uguale a tale numero e, se lo trova,
stampa sul monitor il nome corrispondente altrimenti, se non lo trova, legge da
tastiera il nome e inserisce in coda alla lista un nuovo elemento contenente i
dati letti.
4. Data la seguente mappa di Karnaugh si determini il vaolre
delle uscite “non specificate” in modo da ottenere la forma minima ottimale e
se ne disegni il circuito.
AB 00 01
11 10
C
0 |
- |
1 |
- |
|
1 |
1 |
- |
|
1 |
10 |
10 |
10 |
3 |
//
bibite.h
const int
N=5;
const int
M=25;
enum bool
{F, T}
Class
bibite {
Int
macchina[N];
Public:
bibite
();
bool
vendita (int tipo);
void situazione ();
bool rifornimento (int quanti, int
tipo);
}
//bibite.cc
#include
<iostream.h>
#include
“bibite.h”
bibite::bibite
() {
for (int
i=0; i<N; i++)
macchina[I]=M;
}
bool
bibite::vendita (int tipo)
{
if (macchina[tipo] == 0)
{ cout<< “bibita
terminata/n”;
return F; }
macchina[tipo]--;
return T;
}
bool
bibita::rifornimento (int quante, int tipo)
{
if ((macchina[tipo] + quante) >
M-1)
return F;
macchina[tipo] += quante;
return T;
}
void
bibite::situazione() {
for (int I=0; I<N; I++)
if (macchina[I]==0)
cout << “le bibite di tipo
<< i << “sono terminate \n”;
}
#include <fstream.h>
const int N=12;
int verifica (int v[N])
{
fstream f;
int riscontro[N];
for (int I=o; I<N; I++)
riscontro[I]=0;
int conta=0;
int num;
f.open (numeri.dat, ios::in);
while (f<<num)
for (I=0;
I<N; I++)
if
(num==v[I])
riscontro[I]++;
for (I=0; I<N; I++)
if (riscontro[I]==0)
return 0;
return 1;
}
#include <string.h>
struct elem {
int
matricola;
char*
nome;
elem*
next;
}
void matricola (elem * l)
{
int matr;
char *
nome;
elem aux,
q;
cout<< “Inserisci numero
matricola:\n”;
cin >> matr;
for (aux=l; aux!=0;
aux=aux->next)
if
(aux->matr == matr)
{
cout
<< aux->nome;
return;}
q=new elem;
q->matr=matr;
cout<< “Inserisci il
nome:\n”;
cin>>nome;
strcpy (nome, q->nome);
q->next =0;
aux->next=q;
}