ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 1/6/2000 - C++
1. L'elenco dei soci di un club puo' essere
rappresentato mediante una serie di stringhe ciascuna delle quali indica il
nome di un socio. Il club puo' ammettere un numero di soci praticamente
illimitato. Si definisca la classe club che realizza l'elenco dei soci per mezzo di una lista. Le possibili
operazioni sono:
• club(): costruttore che crea un
elenco vuoto;
• iscrizione(name): inserisce un nuovo socio di nome name nell'elenco;
• ok=ritiro(name): elimina, se esiste, il socio di nome name
dall'elenco e restituisce True. Se non esiste alcun socio con tale nome la
funzione restituisce False;
• ok=controlla(name): ricerca il socio di nome name nell'elenco e se lo
trova restituisce True, altrimenti False;
• ~club(): distruttore che dealloca l'elenco.
2. Sia dato un file numeri.txt che contiene una serie di
numeri interi diversi fra loro. Si scriva una funzione ok=controlla() che usi questo file per
inizializzare due matrici quadrate M1 e M2 di dimensione NxN a valori interi.
L'inizializzazione della due matrici avviene nel seguente modo: prima si
inizializza la matrice M1 riga per riga (partendo dalla riga di indice 0), poi la matrice M2 riga per riga (partendo
dalla riga di indice 0). La funzione infine controlla che ogni elemento della
diagonale sinistra di M1 (dall'elemento M1[0][0] a M[N-1][N-1]) contenga tutti e soli gli elementi della diagonale destra di M2 (dall'elemento M2[0][N-1] a M[N-1][0]). Se il controllo da' esito
positivo la funzione restituisce True, altrimenti False.
3. Si scriva una funzione n=verifica(t) che riceve in ingresso il
puntatore t alla radice di un albero binario di elementi carattere. La funzione
restituisce il numero di vocali contenute nell'albero.
4. Data la seguente mappa di Karnaugh si
determini il valore delle uscite non specificate in modo da ottenere la forma
minima ottimale. Si disegni infine il circuito corrispondente.
AB 00
01 11 10
CD
00 |
1 |
- |
1 |
1 |
01 |
|
|
|
- |
11 |
- |
|
|
|
10 |
1 |
|
|
- |
11 |
10 |
9 |
3 |
//club.h
struct elem {
char*
nome;
elem*
next; }
enum bool {F, T};
class club {
elem*
iscritti;
public:
club()
{iscritti=0};
void
iscrizione (cher* nome);
bool ritiro(char* nome);
bool controlla(char* nome);
~club();
}
//club.cc
#include <iostream.h>
#include <string.h>
#include "club.h"
void
club::iscrizione(char* nome)
{
elem* aux;
aux = new elem;
strcpy
(nuovo, aux->nome);
aux->next
= iscritti;
iscritti
= aux;
}
boolclub::ritiro
(char* ex)
{
bool
trovato=F;
elem*
prec = 0;
elem* aux=iscritti;
while((aux!=0)
&& (!trovato)) {
if(
!(strcmp(aux->nome, ex))) trovato = true;
else {
prec=aux;
aux = aux->next;
}
if
(trovato) {
if
(prec==0) { //eliminazione della testa
della lista
aux=p;
p=p->next;
delete
aux;
}
else { //eliminazione di elemento non
in testa
prec->next
= aux->next;
delete
aux;
}
}
return
trovato;
}
bool
club::controlla( char* socio) {
elem* aux
= iscritti;
bool
trovato = F;
while((aux!=0)
&& (!trovato)) {
if
(!strcmp(aux->nome, socio))
trovato =
T;
aux = aux->next;
}
if
(trovato)
cout<<"la
persona e' iscritta\n";
else
cout<<"la
persona non e' iscritto\n";
return trovato;
}
club::~club() {
elem*
aux=iscritti;
while
(aux!=0) {
iscritti=iscritti->next;
delete aux;
aux = iscritti;
}
}
2.
#include <iostream.h>
enum bool {F, T};
const int N=12;
bool controlla() {
bool trovato = F;
int num;
fstream f;
f.open("numeri.txt", ios :: in);
for (int i=0; i<N; i++)
for (int j=0; j<N; j++) {
if(f>>num) ;
else num=0;
M1[i][j] = num; }
for (i=0; i<N; i++)
for (j=0; j<N; j++) {
if(f>>num) ;
else num=0;
M2[i][j] =
num; }
f.close();
for (i=0; i<N; i++) {
trovato=F;
for (j=0; j<N; j++) {
if (M1[i][j] == M2[i][j] {
trovato = T;
break;
}
if (!trovato) return trovato;
}
}
return trovato;
}
3.
struct nodo {
char lett;
nodo* des;
nodo* sin;
}
int vocali (nodo* t)
{
int conta=0;
if (t ==0) return 0;
if ((t->lett == 'a') || (t->lett == 'e') ||
(t->lett == 'i') || (t->lett == 'o') || (t->lett == 'u'))
conta=1;
return
(conta + vocali(t->des) + vocali(t->sin));
}