ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 3/2/2000 - C++

 

1.      Una Ditta dispone di diversi magazzini dislocati in alcune città. Sia dato un file chiamato disponibilità.txt che in ciascuna riga contiene le seguenti informazioni:

·        un valore intero che identifica un pezzo di ricambio,

·        una stringa di lunghezza massima 25 caratteri che identifica la sede di un magazzino e

·        un valore intero che indica quanti esemplari del pezzo di ricambio sono presenti in quel magazzino.

Si scriva una funzione fornitura (pezzo, quantità) che cerchi quale magazzino ha una disponibilità dell’elemento pezzo più prossima (ma non inferiore) al valore quantità.

2.      Sia data la matrice M1 di dimensione NxM e la matrice M2 di dimensione RxN entrambe di valori interi. Si scriva una funzione ok=controlla(M1, M2) che controlla se la somma degli elementi di ciascuna riga di M1 é uguale alla somma degli elementi della corrispondente colonna di M2 e restituisce il relativo risultato.

3.      Si consideri un mazzo di carte da gioco rappresentato mediante una lista di elementi che contengono l'informazione relativa al segno ed al valore di una carta. Si definiscano le opportune strutture dati e si scriva una funzione estrai_se_uguale(p, n, s) che estrae (senza elimlinarla) dal mazzo l’n-esima carta se il seme di questa è uguale a s e restituisce il puntatore alla carta estratta se ciò e avvenuto altrimenti il restituisce il puntatore nullo.

4.       Dati i numeri decimali A=66, B=-62 e C=125, 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-A e si dica se il risultato ottenuto è o no significativo.

10

9

11

3

 

# include <fstream.h>

#include <limits.h>

#include <string.h>

 

void fornitura (int pezzo, int quantita)

{

            fstream f,

int code, price, diff;

char sede[25];

char sede_ok[25];

int trovato = 0;

int diff_ok = MAX_INT;

 

f.open (“disponibilità.txt”, ios::in);

while(!f.eof())

{

            f >> code >> price >> quanti ;

if ((code == elemento) && (quanti >= quantità))

{

diff = quanti – quantità;

if (diff < diff_ok)

{

                                   diff_ok=diff;

                                   trovato++;

                                   strcpy(sede_ok, sede);

                        }

            }

            }

            if (trovato >0)

            cout<<”Il magazzino è quello di “<<sede_ok<<”\n”;

            else

            cout<<”Non è stato trovato alcun magazzino \n”;

f.close();

}


booleano {F, T};

 

 

booleano controlla (int M1[N][M], int M2 [R][N]))

{

int i, j, k;

int cont1=0,

int cont2=0;

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

            {

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

                                   cont1+=M1[i][j];           

                        for (k=0; k<R, k++)

                                   cont2 += M2[k][i];

 

                        if (cont1!=cont2)

{ok=0;

 break;

}

            }

            if (ok) return T;

            else return F;

}


enum seme {cuori, quadri, fiori, picche};

 

enum valore {A,2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K}

 

struct carta { valore val;

                        seme s;

                        carta *succ;}

 

 

carta* estrai_se_uguale (carta *&mazzo, valore n, seme s)

{

            int i= 1;

carta*p =mazzo;

carta *q;

 

if (mazzo == 0) return 0;

 

while ((p !=0) && (i<n))  {

                        i++;

                        q=p;

                        p = p->pun;

                        }

           

            if (p==0) return 0;

 

            if ((n == 1)&&(mazzo->seme==s))

{

mazzo = mazzo->succ;

return p;

            }

            else if(p->seme==s)

{

q->succ = p->succ;

                        return p;

            }

            return 0;

}