ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 11/01/2002 - C++

 

1.     Sia dato un file chiamato elenco_persone.txt che contiene per ciascuna riga il nome di una persona (max 15 caratteri) e l’età corrispondente. Si scriva una funzione estrai_anziani() che calcola l’età media m delle persone contenute in elenco_persone.txt e costruisce un nuovo file dove vengono scritti i nomi delle persone contenute in elenco_persone.txt che hanno l’età maggiore di m.  


 

 


2.     Si scriva una funzione modifica(l, n) che riceve in ingresso il puntatore l ad una lista semplice a valori interi e un valore intero n. La funzione modifica la lista l nel modo seguente:

·        elimina tutti gli elementi che hanno il campo informativo multiplo di n;

·        ed infine la rende circolare.

 

3.      Sia data una stringa alfa composta da 12 caratteri. Si scriva una funzione booleana ok=estraibile(s) che riceve in ingresso una stringa s e che restituisce T se alfa contiene tutti i caratteri necessari a comporre s, F altrimenti.

Esempio:     se alfa = MSAUCEOORTPE

                       e s = COMPUTER è T

                       se s = TORPORE  è F

 

4.      Dati i numeri decimali A=101, B=63 e C=-129, si determini il minimo numero di bit necessario per rappresentare contemporaneamente i suddetti numeri in complemento a due e se ne dia la rappresentazione. Utilizzando poi lo stesso numero di bit, si esegua l’operazione D=A+B e si dica se il risultato è o no significativo

 

 

 

Punteggio:

Es.1

Es.2

Es.3

Es.4

10

10

10

3

 


_________________________________________________________________

Es. 1

 

#include <fstream.h>

 

void estrai_anziani() {

            fstream f,g;

char nome[16];

int eta=0;

int tot_eta=0;

int cont=0;

int m;

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

 

while(f>>nome>>eta)

{          tot_eta+=eta;

            cont++;

}

if(cont==0)    {          cout<<”file vuoto”;

                                   return; }

m=tot_eta / cont;

 

f.close();

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

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

 

while (f>>nome>>eta)

            if (eta>m)      g<<nome<<”\n”;

 

f.close();

g.close();

}

 

 

Es.2

 

struct elem { int info;

                        elem* next;  };

 

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

 

elem *aux1=l;

while ((l->info%n == 0) && (l!=0))                      //estrazione dalla testa della lista

{          l=l->next;

delete aux1;

aux1=l;          }

 

if(l==0) return;                                            //lista vuota

 

elem *aux2=aux1;

 

for(; aux1!=0; aux1 = aux1->next)                    //estrazione non in testa

{          if(aux1->info % n !=0)

                        aux2=aux1;

            else {  aux2->next = aux1->next;

                        delete aux1;

                        aux1=aux2; }

}

aux2->next=l;                                                         //lista resa circolare

}                     

 

Es. 3

 

bool estrazione(char *s, char alfa[13])

{

int usati [12];

int j;

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

            usati[i]=0;

 

for(i=0; s[i]!=0; i++)

{          j=0;    

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

{          if(s[i]==alfa[j]&&usati[j]==0)

                        {          usati[j]++;

                                   break;           }

}

if(j==13) return F;

}

return T;

}