ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 26/06/2003 - C++

 

1. Sia dato un file testo.txt contenente un insieme di caratteri. Si scriva una funzione dividi_file() che esegue le seguenti operazioni:

 

2.  Data una lista doppia a valori interi ld si scriva una funzione ok=dealloca(n, ld) che riceve in ingresso un valore intero e la lista, cerca nella lista gli elementi con campo informativo minore di n e li dealloca. Se alla fine la lista risulta essere vuota la funzione restituisce True altrimenti False.

 

3.  Sia data una matrice quadrata M di dimensione nxn a valori interi. Si scriva una funzione ok=controlla(M) che riceve in ingresso la matrice e restituisce True se la somma degli elementi della riga i-esima è uguale alla somma degli elementi della colonna n-i-1-esima, False altrimenti.

 

4.  Dati i numeri decimali A=99, B=141 e C=-96, 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-C e si discuta 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 dividi_file()

{

char c;

int cont=0;

fstream leggi, scrivi;

 

leggi.open(“testo.txt”, ios::in);

 

while(leggi.get(c))

cont++;

 

leggi.close();

leggi.open(“testo.txt”, ios::in);

scrivi.open(“mezzo.txt”, ios::out);

 

for(int i=0; i<cont/2; i++)

            leggi.get(c);

 

while(leggi.get(c))

            scrivi<<c;

 

leggi.close();

scrivi.close();

}

 

 

2.

boolean dealloca(int n, elem *& ld)

{

            elem *aux, *aux1;

           

if(ld==0)

return true;

 

while(ld->info <n && ld!=0)

{

            aux= ld

ld = ld ->next;

ld ->prec=0;

delete aux;

}

aux=ld;

while(aux!= 0)

{

            if(aux->info < n)

            {

                        aux->next->prec=aux->prec;

                        aux->prec->next=aux->next;

                        aux1=aux;

                        aux=aux->next;

                        delete aux1;

            }

            else      aux=aux->next;

}

if (ld==0)

return true;

return false;

}

 

3.

const int N=20;

 

boolean controlla(int M[N-1][N-1])

{

int contriga=0;

int contcolonna=0;

 

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

{

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

{

contriga+=M[i][j];

contcolonna+=M[j][n-i-1];

}

if (contriga!=contcolonna)

return F;

contriga=0;

contcolonna=0;

}

return T;

}