ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI 13/9/2001 - C++
1. Si definisca una classe list ogni oggetto della quale rappresenta un lista semplice a valori interi sulla quale sono possibili le seguenti operazioni:
list(): costruttore che crea una lista vuota;
inserisci(info): inserisce un elemento con campo informativo uguale a info nella lista;
bool togli(): se la lista non è vuota, elimina dalla lista lultimo elemento restituendo T, altrimenti restituisce F;
~list(): distruttore che dealloca
la lista.
2. Un file chiamato persone.dat
contiene per ciascuna riga il nome, e un valore intero che rappresenta letà della
persona. Scrivere una funzione seleziona()che scriva su un nuovo file chiamato giovani.dat il nome delle due persone presenti nel file persone.dat di più età più bassa.
Per semplicità si consideri che le persone presenti nel file persone.dat siano tutte di età diversa.
3. Siano date due stringhe s1 e s2. Si scriva una funzione in_comune(s1,s2) che costruisce una terza stringa s3 composta dai caratteri in comune a s1 e s2. Per semplicità si consideri che le stringhe s1 e s2 non contengono caratteri ripetuti al loro interno.
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
C
00 |
- |
|
|
1 |
01 |
1 |
|
- |
- |
11 |
|
|
|
|
10 |
1 |
1 |
- |
1 |
10 |
10 |
10 |
3 |
1.
//list.h
struct
elem { int info;
elem* next;}
enum
bool {F, T};
class
list {
elem* l;
public:
list()
{l=0};
void inserisci (int n);
bool togli ();
~list();}
//list.cc
#include
"list.h"
void
list::inserisci(int n)
{ elem np;
new elem np ;
np->info = n;
np ->next=l; //inserimento
in testa alla lista
l=np;}
bool list::togli ()
{ elem* aux;
elem*
aux1;
if
(l==0) return F;
for
(aux=l; aux->next !=0 ; aux=aux->next)
aux1=aux ;
if(aux==l)
l=0;
else
aux1->next=0;
delete
aux;
return
T;}
list::~list()
{
elem*
aux=l;
while (aux!=0) {
l=l->next;
delete
aux;
aux
= l;}
}
2.
#include
<fstream.h>
#include
<string.h>
void
seleziona ()
{ fstream f, g;
int
g1, g2, eta, temp ;
char*
n1, n2, n;
f.open
(persone.dat, ios::in);
if(f>>n1>>g1)
if(f>>n2>>g2)
else { cout<<Un solo nome nel
file\n;
return;}
else
{cout<<nessun nome nel file\n;
return;}
if(g1>g2) { temp=g1; g1=g2; g2=temp;
strcpy(temp_st, nome1); strcpy(nome1,nome2); strcpy(nome2, temp_st);
}
while
(f>>n>>eta)
{
if(eta<g1)
{ strcpy(n2,n1);
strcpy(n1,n);
g2=g1;
g1=eta;}
if(eta<g2)
{ strcpy(n2,n);
g2=eta;}
}
g.open(giovani.dat,
ios::out);
g<<n1<<\t<<n2;
g.close();
}
3.
void
in_comune(char* s1, char* s2)
{
int
h=0;
char*
s3;
for(int
i=0; s1[i]!=0; i++)
for(int j=0; s2[j]!=0; j++)
if (s1[i] == s2[j]) {
s3[h]=s1[i];
h++;
break;}
s3[h]=0;
}