ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI 13/01/2003 - C++
1. Una banca può essere rappresentata mediante unarray a valori interi di N posizioni. Ciascun elemento dellarray rappresenta lammontare 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 lordinamento. 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 loperazione 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 ;
}}