ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 17/09/2004 - C++
1.
Un file chiamato dati.txt contiene per ciascuna riga
una stringa di lunghezza massima 24 caratteri che rappresenta il nome di uno
studente e un valore intero che ne rappresenta il numero di matricola. Scrivere
una funzione trasforma() che modifica il file dati.txt in modo tale che
contenga soltanto due righe del file originario: quella relativa al numero di
matricola più grande e quella relativa al numero di matricola più piccolo.
2.
Sia data una lista semplice l i cui elementi hanno due
campi informativi di tipo intero. Si scriva una funzione modifica(l)
che elimina dalla lista l quegli elementi che hanno entrambi i
campi informativi pari.
3. Siano
date due matrici quadrate M1 e M2 entrambe di dimensione NxN a valori booleani (0/1). Si scriva una funzione booleana ok=controlla_contenuto(M1, M2)
che restituisce true se
entrambe le matrici contengono lo stesso numero di elementi con valore 0, false
altrimenti.
4.
Dati i numeri decimali A=97, B=-161 e C=101, 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 |
11 |
10 |
9 |
3 |
1.
#include <fstream.h>
#include <string.h>
void
trasforma()
{
fstream
f;
int num;
char
nome[25];
int
matr_max, matr_min;
char nome_max[25], nome_min[25];
f.open(“dati.txt“, ios::in);
if(f>>nome_max>>matr_max);
else
{ f.close();
return;
}
if(f>>nome_min>>matr_min);
else
{f.close();
return; }
if(matr_min>matr_max)
{ num=matr_min;
matr_min=matr_max;
matr_max=num;
strcpy(nome,
nome_min),
strcpy(nome_max,
nome_min);
strcpy(nome_max,
nome);
}
while(f>>nome>>num)
{ if(num>matr_max)
{ strcpy(nome_max,
nome);
matr_max=num;
}
if(num<matr_min)
{ strcpy(nome_min, nome);
matr_min=num;
}
}
f.close();
f.open(“dati.txt”,
ios::out);
f<<nome_min<<”
“<<matr_min<<”\n”<<nome_max<<” “<<matr_max;
f.close();
}
2.
struct elem { int
info1;
int
info2;
elem
*next;
};
void
elimina(elem *&l)
{
elem *aux1, *aux2;
if(l==0) return;
aux1=l;
// eliminazione dalla testa della lista
while(l!=0 && l->info1%2==0 &&
l->info2%2==0)
{ l=l->next;
delete
aux1;
aux1=l;
}
if(l==0) return;
aux2=l->next;
while(aux2!=0)
{ if(aux2->info1%2==0
&& aux2->info2%2==0)
{ aux1->next=aux2->next;
delete
aux2;
aux2=aux1->next;
}
else
{ aux1=aux1->next;
aux2=aux2->next;
}
} }
3.
const int N=12;
boolean controlla_contenuto(boolean
M1[N][N], boolean M2[N][N])
{
int cont1=0;
int cont2=0;
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
{ if(M1[i][j])
cont1++;
if(M2[i][j]) cont2++;
}
if(cont1==cont2) return true;
return false;
}