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;

}