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;
}