ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 12/01/2001 - C++

 

 

1.      Un file chiamato numeri.dat contiene un insieme non vuoto di numeri interi maggiori di zero. Scrivere una funzione cerca_due_max() che legge il file e stampa sul monitor i due numeri più grandi contenuti in esso.       


Casella di testo: 2. 	Si scriva una funzione 
int build_matrix(int M[N][N]) che riceve in ingresso una matrice M di dimensione NxN e che la modifica come è mostrato nella figura a fianco.

 


3.   Si scriva una funzione elimina(c, l) che riceve in ingresso un carattere c e il puntatore l a una lista i cui elementi contengono due campi informativi: una campo carattere ed un campo binario F/T. La funzione elimina gli elementi che hanno il valore di c nel primo campo informativo e il valore T nel secondo. Le eventuali modifiche apportate alla lista originaria devono essere mantenute anche dopo la terminazione della funzione.          

4.   Dati i numeri decimali A=64, B=-63 e C=51, 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=B-A-1 e si dica se il risultato è o no significativo

 

 

10

8

11

4

 


#include <fstream.h>

 

void cerca_due_max()

{

fstream f;

 

int letto, max1;

int max2=0;

 

f.open (“numeri.dat”, ios::in);

 

f >> max1;

 

while (f>> letto) {

            if (letto > max1)         

{ max2 = max1; 

max1 = letto; }

            else if (letto >max2) max2=letto;

}

 

if (max2==0)

            cout<< “il file contiene un solo elemento !\n”;

else

            cout<<”i due valori più grandi sono:\n”<< max1 << “e\t” << max2;

 

f.close();

}


const int N=10;

 

void build_matrix (int M[N][N])

{

int j;

 

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

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

            {

if(i==j)

{

M[i][i]=i;

M[i][N-i-1]=N-i-1;

}

else

M[i][j]=0;

}

}

 


 

enum bool {F, T};

 

struct elem {

                        char lettera;

                        bool ok;

                        elem* next;

                        };

 

 

void elimina (elem *& l, char c)

{

            elem  *aux, *p;

            aux=l,

p=l ;

 

            if (l==0) return;

 

            while((aux->lettera == c) && (aux->ok) && (aux !=0))

            {

                        l=aux->next ;

p=l ;

delete aux ;

aux=l ;

            }

 

if (aux !=0)

aux=aux->next ;

else

            return ;

 

while (aux !=0)

{

            if ((aux->lettera==c) && (aux->ok))

{

p->next =aux->next ;

delete aux;

aux=p->next;

                        }

                        else {

aux=aux-next ;

p=p->next ;

}

}

}