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 l’ultimo 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 l’età 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;

}