ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI 26/09/2002 - C++
1. Un noleggio di biciclette dispone di N=10 modelli di bici (identificati con le prime 10 lettere dellalfabeto) e di M=20 biciclette per ciascun modello. Un tale noleggio può essere rappresentato mediante un array ciascun elemento del quale è una struttura con un campo carattere che identifica il modello di bici e un campo intero che identifica la quantità di bici attualmente noleggiate. Si definisca una classe biciclette assumendo che le possibili operazioni siano le seguenti:
2. Sia dato un file chiamato elenco.txt contenente in ciascuna riga una stringa di caratteri e valore numerico che rappresentano rispettivamente il nome e letà di una persona. Si scriva una funzione giovane() che stampa sul monitor il nome della persona più giovane che si trova nel file. Se le persone più giovani sono più di una, si deve stampare il nome di quella alfabeticamente minore.
3. Sia data una lista circolare l a valori interi. Si scriva una funzione elimina_pos(l, n) che elimina lelemento di l che si incontra dopo aver scandito la lista di n posizioni.
4. Dati i numeri decimali A=124, B=95 e C=-64, 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 |
9 |
11 |
3 |
1.
//
bici.h
const
int N=10;
const
int M=20;
struct
nolo { char
mod;
int
fuori;
}
class
biciclette {
nolo R[N];
public:
biciclette() ;
bool
noleggia(char m) ;
void
resa (char id_tipo);
int
n_m_esauriti();
}
// bici.h.cc
#include
bici.h
biciclette::biciclette()
{ char
md=a;
for
(int i=0; i<N; i++)
{ R[i].mod=md;
R[i].fuori=0;
md++;}
}
bool
biciclette::noleggia(char m) {
for(int i=0, i<N; i++) {
if(R[i].mod==m)
{ if (R[i].fuori)>0) {
R[i].fuori++;
return
T; } }
return F; }
cout<<modello
inesistente\n;
return
F;}
void
biciclette::resa (char m)
{
for(int
i=0, i<N; i++)
if(R[i].mod==m)
{ R[i].fuori--;
return; }
cout<<modello
inesistente\n;
}
int biciclette::
n_m_esauriti ( )
{ int
cont=0;
for
(int i=0; i<N; i++)
if(R[i].fuori==M)
cont++;
return
cont; }
2.
#include
<fstream.h>
#include
<string.h>
void giovane {
bool contr=F;
fstream f;
int eta, min;
char *nome, *giov;
f.open(numeri.txt,
ios::in);
if(f>>giov>>min)
;
else
return;
while
(f>>nome>>eta)
{ if(eta<min) {
strcpy(nome, giov);
min=eta;
continue;}
if(eta==min) {
if(strcmp(nome,giov)<0)
{
strcpy(nome, giov);
min=eta;
continue;}}
}
cout >> giov
<< »\n » ;
f.close();
}
3.
void elimina_pos
(elem *&l, int n)
{
int x;
elem *aux1, *aux2;
if (l==0) return;
//lista vuota
if(l->next==l)
// lista con un solo elemento
{ delete
l;
l=0;
return;}
aux1=l ;
if(n==0) { for(aux2=l;
aux2->next!=l; aux2=aux2->next) ; //caso
n==0
l=l->next ;
delete aux1;
aux2->next=l;
return;}
aux2=l->next ;
for(int i=0 ;
i<n; i++)
// caso generale
{ aux1=aux1-next;
aux2=aux2->next;
}
if(aux2 !=l) {
//caso generale : estrazione non testa
aux1->next=aux2->next ;
delete aux2 ;
return ;
}
else ( aux1->next=aux2->next ; //caso
generale: estrazione testa
delete aux2 ;
l=aux1->next ;
return ; }
}