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