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 dell’alfabeto) 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 l’età 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 l’elemento 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 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

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 ;  }

}