ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/01/2003 - C++

 

 

1.      Una banca può essere rappresentata mediante un’array a valori interi di N posizioni. Ciascun elemento dell’array rappresenta l’ammontare dei depositi sul conto corrente di uno degli N clienti della banca (identificati con numeri progressivi da 0 a N-1).  Si definisca una classe banca assumendo che le possibili operazioni siano le seguenti:

 

2.      Sia dato un file chiamato prodotti.txt contenente in ciascuna riga una stringa di caratteri che rappresenta il nome di un prodotto e un valore numerico intero che ne rappresenta il codice. Si scriva una funzione ultime_righe(n) che crea un nuovo file u_prodottti.txt che contiene le ultime n righe di prodotti.txt. Se n è maggiore del numero di righe del file prodotti.txt allora la funzione visualizza un messaggio di errore e non crea alcun file.

 

3.      Sia data una lista circolare l a valori interi ordinata in senso crescente. Si scriva una funzione inserisci(l, n) che, verifica che non esista alcun elemento in l con campo informativo uguale a n e in tal caso ne inserisce uno mantenendo l’ordinamento. Altrimenti non modifica la lista e visualizza un messaggio di avvertenza.

 

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

 

 

 

Punteggio:

Es.1

Es.2

Es.3

Es.4

10

10

10

3

 

1.       

// banca.h

const int N=100;

 

class banca {

          int CC[N];

public:

          banca() ;

          voi prelievo (int i, int d) ;

          void versamento (int i, int d); 

          int conti_in_rosso();

}

 

// banca.cc

#include “banca.h”

#include <iostream.h>

 

banca::banca()

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

                        CC[i]=0;

}

 

void banca::prelievo (int i, int d) {

CC[i]-=d;

if (CC[i]<0)

cout<<”Il conto è andato in rosso\n”;                 

}

 

void banca::versamento (int i, int d) 

{         CC[i]+=d; }

 

int banca:: conti_in_rosso( )

{         int cont=0;

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

                        if(CC[i]<0) cont++;

return cont; }

 

2.

#include <fstream.h>

 

void ultime_righe(int n) {

fstream f, g;

int cod ;

int cont=0;

char *s;

 

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

while(f>>s>>cod)

cont++;

f.close();

if(cont<n)

{

cout<<”il file contiene meno di “ << n<< “righe\n”;

return; }

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

 

int i=cont-n;

while(i!=0)

{ f>>s>>cod;

i--;

}

g.open(“u_prodotti.txt”, ios::out);

while(f>>s>>cod)

g<<s<<” “<<cod<<”\n”;

g.close();

f.close();

}

 

3.

#include <iostream.h>

 

void inserisci(elem *&l, int n) {

elem *aux, *aux1, *aux2 ;

if(l==0)              //caso lista vuota

{

l=new elem ;

l->info=n;

l->next=l;

}

if(l->info > n)      //caso inserimento in testa

{ aux=new elem;

aux->info=n;

aux->next=l ;

aux1=l ;

while(aux1->next=l)

aux1=aux1->next;

l=aux ;

aux1->next=l ;

return ;

}

aux=l->next ;

aux1=l ;

 

while((aux->info<n)&&(aux !=l)) //caso generale

{

            aux=aux->next ;

            aux1=aux1->next ;

}

if(aux->info == n)

{ cout<< »elemento già presente \n » ;

return,

}

else

{

aux2=new elem;

aux2->info=n;

aux2->next = aux ;

aux1->next=aux2 ;

}}