ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 23/9/99 - C++
1.
Un
file coordinate.txt contiene per ciascuna riga una coppia di numeri
reali che rappresentano rispettivamente l’ascissa e l’ordinata di un punto
nello spazio cartesiano. Si scriva una funzione dist_minima() che legge tale file e
stampa sul monitor le coordinate del punto più vicino all’origine degli assi.
Si supponga che il file non sia vuoto.
2.
Si
scriva una funzione ok=controlla(m1, m2) che riceve come parametri di
ingresso due matrici di interi di dimensione NxN. La funzione controlla che
ogni riga i-esima della matrice m1 contenga tutti e soli gli
elementi della colonna i-esima della matrice m2 e in tal caso restituisce
il valore true. Altrimenti restituisce il valore false. Si assuma per semplicità che gli elementi di ciascuna matrice siano
diversi fra loro.
3.
Si
scriva una funzione l=cerca(lc, n) che riceve in ingresso il
puntatore ad una lista circolare di
elementi interi lc ed un intero n. La funzione ricerca nella
lista il primo elemento con valore uguale a n. Se l’elemento viene
trovato la funzione restituisce il puntatore all’elemento corrispondente,
altrimenti restituisce il puntatore nullo.
4.
Dati
i numeri decimali A=79, B=-49 e C=119, 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=A-B e si dica se il risultato
ottenuto è o no significativo.
10 |
10 |
10 |
3 |
1)
# include <fstream.h>
# include <math.h>
void
dist_ min () {
struct
punto {
double ascissa;
double ordinata; }
double
min, m1;
punto
p,m;
fstream.f;
f.open
(“coordinate.txt”, ios::in);
f>>m.
ascissa >>m.ordinata;
min= sqrt
((m.ascissa* m.ascissa)+(m.ordinata* m.ordinata));
while
(f>>p. ascissa >> p. ordinata)
{m1=sqrt
((p.ascissa* p.ascissa)+(p.ordinata* p.ordinata));
if
(m1<<min) {m.ascissa= p.ascissa;
m.ordinata=
p.ordinata;
min=m1; }
}
cout<<m.ascissa<<m.ordinata;
f.close;
}
2)
enum booleano {F, T}
const int N=6;
booleano controlla (int m1[N][N], int m2[N][N]) {
booleano
trovato;
booleano
continua=T;
int i=0;
for (int
j=0; j<N; j++) {
while
((i<N) && (continua)) {
trovato =
F;
int k=0;
while
((k<N) && (!trovato)) {
if
(m1[j][i] == m2[k][j]) trovato=T;
else {
if
(k==(N-1)) continua = F;
k++;
}
}
i++;
}
return
continua;
}
3)
elem *cerca(elem *p0, int i)
{
elem *p;
if (p0 == 0) return 0; // lista vuota
if (p0 ->inf == n) return p0; // cerca nel primo elemento
p= p0 ->pun;
while (p != p0) {
if (p->inf == n) return p;
p = p ->pun;
}
return 0;
}