ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 23/9/99 - C++

 

 

1.    Un file coordinate.txt contiene per ciascuna riga una coppia di numeri reali che rappresentano rispettivamente l’ascissa e l’ordinata di un punto nello spazio cartesiano. Si scriva una funzione dist_minima() che legge tale file e stampa sul monitor le coordinate del punto più vicino all’origine degli assi. Si supponga che il file non sia vuoto.

2.    Si scriva una funzione ok=controlla(m1, m2) che riceve come parametri di ingresso due matrici di interi di dimensione NxN. La funzione controlla che ogni riga i-esima della matrice m1 contenga tutti e soli gli elementi della colonna i-esima della matrice m2 e in tal caso restituisce il valore true. Altrimenti restituisce il valore false. Si assuma per semplicità che gli elementi di ciascuna matrice siano diversi fra loro.

3.    Si scriva una funzione l=cerca(lc, n) che riceve in ingresso il puntatore ad una lista  circolare di elementi interi lc ed un intero n. La funzione ricerca nella lista il primo elemento con valore uguale a n. Se l’elemento viene trovato la funzione restituisce il puntatore all’elemento corrispondente, altrimenti restituisce il puntatore nullo.

4.    Dati i numeri decimali A=79, B=-49 e C=119, 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 e si dica se il risultato ottenuto è o no significativo.

 

 

10

10

10

3

 


1)

 # include <fstream.h>

# include <math.h>

 

void dist_ min () {

struct punto {

  double ascissa;

  double ordinata; }

 

double min, m1;

punto p,m;

fstream.f;

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

f>>m. ascissa >>m.ordinata;

min= sqrt ((m.ascissa* m.ascissa)+(m.ordinata* m.ordinata));

while (f>>p. ascissa >> p. ordinata)

{m1=sqrt ((p.ascissa* p.ascissa)+(p.ordinata* p.ordinata));

if (m1<<min) {m.ascissa= p.ascissa;

m.ordinata= p.ordinata;

min=m1; }

}

cout<<m.ascissa<<m.ordinata;

f.close;

}

 


2)

 

enum booleano {F, T}

 

const int N=6;

 

booleano controlla (int m1[N][N], int m2[N][N])  {

 

booleano trovato;

booleano continua=T;

 

int i=0;

 

for (int j=0; j<N; j++) {

while ((i<N) && (continua)) {

trovato = F;

int k=0;

while ((k<N) && (!trovato))  {

if (m1[j][i] == m2[k][j]) trovato=T;

else {

if (k==(N-1)) continua = F;

k++;

}

}

i++;

}

return continua;

}


3)

 

elem *cerca(elem *p0, int i)

{

elem *p;

 

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

     

      if (p0 ->inf == n) return p0;   // cerca nel primo elemento

 

      p= p0 ->pun;

      while (p != p0)  {

                   if (p->inf == n) return p;

                   p = p ->pun;

                   }

 

      return 0;

}