ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 14/02/2002 - C++

 

1.     Il medagliere dei giochi olimpici può essere rappresentato mediante una matrice di dimensione nx3 dove l’indice delle righe identifica una nazione partecipante e ciascuna colonna rappresenta il numero di medaglie vinte (la colonna di indice 0 contiene il numero delle medaglie d’oro vinte, quella di indice 1 il numero di quelle argento e la colonna di indice 2 il numero di quelle di bronzo). Si definisca una classe medagliere assumendo che le possibili operazioni siano le seguenti:

 


2.    Sia dato il file non vuoto elenco_per_nome.txt che contiene in ciascuna riga il nome di una persona (stringa di al più 20 caratteri) e il corrispondente numero di matricola (intero positivo). Si scriva una funzione ordina_per_matr() che costruisce un nuovo file elenco_per_matr.txt contenente lo stesso elenco ma ordinato per numero di matricola in senso decrescente.

 

3.    Sia data una lista semplice l i cui elementi hanno due campi informativi che rappresentano l’ascissa e l’ordinata di un punto nello spazio cartesiano. Si scriva una funzione in_cerchio(l, n) che riceve come parametri la lista l e un intero n e che modifica l deallocando tutti gli elementi che hanno una distanza dall’origine degli assi maggiore di n.

 

4.   Dati i numeri decimali A=233, B=-163 e C=90, 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

 

 

 

 

 

// medagliere.h

enum matallo {O, A, B};

const int N=20;

class medagliere {

          ind *M;

public:

          medagliere() ;

          void medaglia(int n, metallo m) ;

          int situazione_nazione(int n, matallo m);

          ~medagliere() {delete [ ][3] M;};

}

 

// medagliere.cc

#include “medagliere.h”

 

medagliere::medagliere()

{ M = new int[N][3];

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

            for(int j=0; j<3; j++)

            M[i][j]=0;

}

 

void medagliere::medaglia(int n, metallo m) {

          M[n][m]++; }

 

int medagliere::situazione_nazione(int n)

{

          int cont=0;

          cont=cont+M[n][0]+M[n][1]+M[n][2];

          return cont ;

}

 

2.

#include <fstream.h>

 

void ordina_per_matr() {

 

fstream f, g;

char nome[21];

int matr;

int cont=0 ;

int matr_max=0;

char nome_max[21] ;

int matr_ok=0;

char nome_ok[21] ;

 

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

g.open(“elenco_per_matr.txt, ios::app);

 

while(f>>nome>>matr)

{        if(matr>matr_max) matr_max=matr;

          strcpy(nome, nome_max);

          cont++;              }

 

g<<nome_max<<matr_max<<”\n”;

 

matr_ok=0;

for (int i=0; i<cont-1; i++)

{

          f.close();

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

         

          while(f>>nome>>matr)

          { if(matr_ok<matr<matr_max)

            {           matr_ok=matr;

                        strcpy(nome, nome_ok);

            }

          }

          g>>nome_ok >> matr_ok;

          matr_max= matr_ok;

          matr_ok=0 ;

}

f.close()

g.close();

}

 

3.

[#include <math.h>

 

struct elem {    double x;

                        double y;

                        elem* next;     };

 

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

 

elem *aux1=l;

while (sqrt((l->x*l->x)+ (l->y*l->y))>=n) && (l!=0))                    //estrazione dalla testa

{           l=l->next;

delete aux1;

aux1=l;            }

 

if(l==0) return;                                    

elem *aux2=aux1;

 

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

{           if(sqrt((aux1->x*aux1->x)+ (aux1->y*aux1->y))>=n))

                        aux2=aux1;

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

                        delete aux1;

                        aux1=aux2;     }

}

}