ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 7/9/2000 - C++

 

 

1.     

e1  e4  e7  e10  e13

e2  e5  e8  e11  e14

e3  e6  e9  e12  e15

 

e1

e2

e3

e4

e5

e6

e7

..;

e15

 
Sia dato un file dati.dat che contiene un numero pari a N*M righe ciascuna delle quali contenente un valore intero.

Si scriva una funzione in_matrice() che costruisce un file chiamato matrice.dat che rappresenta una matrice di dimensione N*M (N righe ciascuna con M valori interi separati da uno spazio vuoto). Il file matrice.dat deve essere tale che la sua prima colonna č costituita dai primi N elementi del file dati.dat, la seconda colonna dai successivi N elementi di dati.dat, ecc.

Es.:

N=3, M=5

Dati.dat:

 

 

 

 

 

 

 

Matrice.dat:

 

 

 

 

 

2.      Si scriva una funzione ok=controlla(M1, M2) che riceve in ingresso due matrici binarie (di elementi 0/1) di dimensione NxN. La funzione controlla che ogni riga i-esima della matrice M1 contenga tutti e soli gli elementi della colonna (N-i)-esima di M2 e in tal caso restituisce il valore True. Altrimenti restituisce False.

 

3.      Si scriva una funzione dist=farthest(s) che accetta in ingresso il puntatore ad una lista di punti nello spazio cartesiano (x, y), trova la coppia che dista maggiormente dall’origine degli assi e ne restituisce la distanza.

 

4.      Data la seguente mappa di Karnaugh si determini il valore delle uscite “non specificate” in modo da ottenere la forma minima ottimale.

 

 

1

-

-

 

-

1

1

-

 

 

10

10

10

3


1.

#include <fstream.h>

 

void in-matrice ()

{

int i, j, h;

fstream leggi, scrivi;

 

scrivi.open (“matrice.dat”, ios::out);

int parti, letto, avuoto;

 

for (i=1; i<=N; i++)

{

            leggi.open (“dati.dat”, ios::in);

            parti=i-1;

            while (parti>0) {

                        leggi>>avuoto;

                        parti--; }

 

            for (h=1; h<=M; h++)

            {

            leggi >> letto;

            scrivi <<letto<< “ “;

 

            for (j=1; j<N; j++)

            leggi >> avuoto;

            }

scrivi<<”/n”;

leggi.close();

}

scrivi.close();

}


2.

enum bool {F, T}

 

const int N=8;

 

bool confronta (int M1 [N][N], int M2 [N][N])

{

bool continua = T;

int conta1=0;

int conta2 = 0;

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

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

            {

            conta1 += M1[i][j];

            conta2 += M2[j][N-I-1];

            }

if (conta1 != conta2)  {

            continua=F;

            break; }

}

return continua;

}


3.

#include <math.h>

 

struct point {   double x;

                        double y;

                        point* next;

                        }

 

double farthest (point* s)

{

double a, b, d;

double dist_max = 0;

 

if (s==0) return –1;

 

while (s!=0)

{

a = (s->x) * (s->x);

b = (s->y) * (s->y);

d = sqrt (a+b);

 

if (d >= dist_max)       dist_max = d;

 

s=s->next;

}

return dist_max;

}