ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 12/09/2002 - C++

 

 

1.    Sia dato un file chiamato numeri.txt contenente un insieme di valori interi. Si scriva una funzione estremi() che trova il massimo ed il minimo valore contenuti nel file numeri.txt. Questa funzione deve anche costruire un nuovo file numeri_bis.txt che contiene gli stessi elementi di numeri.txt con l’eccezione di tutte le occorrenze del massimo e del minimo.

 

2.    Sia data una matrice H di dimensione MxM a valori interi. Si scriva una funzione controlla(a, c) che riceve in ingresso due array a e c di dimensione N a valori interi. La funzione modifica l’array c in modo tale che il generico elemento c[i] vale 1 se il  valore del corrispondente elemento a[i] compare nella matrice H, 0 altrimenti.

 

3.    Sia data una lista semplice l i cui elementi hanno due campi informativi interi. Si scriva una funzione coppie(l) che elimina tutti gli elementi di l che hanno entrambi i campi minori dei corrispondenti campi della testa della lista stessa.

 

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

 

 

 

 

 

 

 

Punteggio:

Es.1

Es.2

Es.3

Es.4

10

10

10

3

 

1.       

#include <fstream.h>

 

void estremi {

bool contr=F;

fstream f, g;

int a, x, min, max;

 

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

if (f>>max)

            { while(f>>min)

{ if(max!=min) {          contr=T;

                                    break;  }

 else return; }

 if((!contr) return;

}

else return;

 

if(max<min) {  a=max;

                        max=min;

                        min=a;

                        }

 

while(f>>x)

{           if(x>max) max=x;

            if(x<min) min=x;

}

f.close();

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

g.open(“numeri_bis.txt, ios::out);

while(f>>x)

{

if((x!=max)&&(x!=min))

g<<x;

}

f.close();

g.close();

}

 

 

2.

void controllo (int a[N], int c[N])

{

bool contr = F;

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

            c[i] =0;

 

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

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

                        for(int h=0; h<M; h++)

                        {

                                   if(a[i]==M[j][h])

                                   {           c[i]=1;

                                               contr=T;

                                               break;

                                   }

                        }

            if(contr) break;

            }

contr=F;

} }

 

 

3.

struct elem {

            int a;

            int b;

            elem* next;

            }

 

void coppie (elem *l)

{

int at, bt;

elem *aux, *aux2;

            if (l==0) return;

            if(l->next==0) return;

 

at= l->a;

bt=l->b;

 

aux=l->next;

aux2=l;

 

for(; aux!=0; aux=aux->next)

{

            if((aux->a < at) && (aux->b <bt))

            {

                        aux2->next = aux->next;

                        delete aux;

                        aux=aux2;

            }

else

            aux2=aux1;

}}}