ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI 15/07/99 - C++
1.
Il file valori.txt
contiene per ciascuna riga il nome di un componente del sangue ed il relativo valore
minimo e massimo tollerato. Si scriva un funzione ok=controllo(nome, valore) che
riceve come argomento una stringa contenente il nome di un componente del sangue ed un
valore reale che ne rappresenta il valore riscontrato. La funzione verifica se tale valore
rientra nei limiti previsti per il componente e restituisce il valore booleano corrispondente (true se il valore rientra nei
valori tollerati, false
altrimenti).
2.
Si scriva una funzione maggiore(t, n) che riceve in
ingresso il puntatore ad un albero binario e che visualizza sul monitor il numero dei nodi
dellalbero aventi valore maggiore di n. Si consideri che i nodi
dellalbero contengano numeri interi positivi.
3.
Si consideri un mazzo di carte da gioco rappresentato mediante una lista di
elementi che contengono linformazione relativa al segno ed al valore di una carta.
Si definiscano le opportune strutture dati e si scriva una funzione alza(p, n) che riceve come argomenti
il puntatore p ad una lista
di carte ed un intero n, ed
effettui una alzata del mazzo, in corrispondenza della n-esima carta. In altre parole, la
funzione deve portare in testa alla lista tutti gli elementi successivi alln-esimo
elemento.
4. Dati i numeri decimali A=69, B=-59 e C=126, 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 loperazione D=A-B e si dica se il risultato ottenuto è o no significativo.
10 |
9 |
11 |
3 |
1)
#
include <fstream.h>
#
include <string.h>
enum
booleano {false, true};
booleano controllo
(char nome[], double valore)
{
booleano trovato =
false;
char
read[];
int
conf;
double
v1, v2;
fstream f;
booleano
esito=false;
f.open
(valori.txt, ios::in);
while
((f>>read>>v1>>v2) && (!trovato))
{
conf
= strcmp (nome, read);
if
(conf==0) {
trovato = true;
if
((valore<v2)&&(valore>v1)) esito = true;
}
}
if (!trovato)
cout<<componente errato\n;
return esito;
}
2)
#include
<iostream.h>
struct nodo {
int info;
nodo *sin;
nodo *des;
};
int
conta (nodo* t1, int n) {
if(t1
== 0) return 0;
if
(t1->info>n)
return (1 +
maggiore(t1->sin, n) + maggiore(t1->des, n));
else
return
(maggiore(t1->sin, n) + maggiore(t1->des, n));
}
void maggiore(nodo
*t1, int n) {
cout <<
conta(t1, n);
}
3)
enum seme {cuori,
quadri, fiori, picche};
enum valore
{A,2,3,4,5,6,7,8,9,10,J, Q, K};
struct carta { valore val;
seme s;
carta *succ;
}
void alza (carta
*&p0, int n)
{
carta *p = p0,
//puntatore per la scansione
carta *q;
//puntatore alln-esima carta
carta *last;
// puntatore allultima carta
int i = 0;
// contatore dei passi di scansione
if
((p0 == 0) || (p0->pun == 0) || (n<1)) return;
p=p0;
while ((p != 0)
&& (i< n) ) {
//scorre la lista di n posizioni
i++;
q = p;
//q punta alla carta i-esima
p = p->pun; }
//p punta alla carta (i+1)-esima
if
(p==0) return
// n>num. Carte
for
(; p!=0; p=p->pun)
last = p
//last sullultima
last->pun
= p0;
p0 = q->pun;
q->pun = 0;
}