ESAME DI FONDAMENTI DI INFORMATICA – Prof. SIMONCINI – 21/6/2001

 

1.    Un treno è composto da n=15 carrozze di m=80 posti ciascuna. Un tale treno è rappresentabile mediante una matrice di dimensione nxm il cui elemento (i,j) vale 0 se il posto j-esimo della i-esima carrozza è libero, 1 se è occupato. Gli elementi con indice di colonna pari corrispondono a posti al finestrino mentre quelli di indice di colonna dispari ad un posto al corridoio. Si definisca una classe treno, ogni oggetto della quale rappresenta un treno. Sugli oggetti di tale classe è possibile effettuare le seguenti operazioni:

2.   Siano dati due file di testo non vuoti chiamati parole.dat e testo.dat. Il file parole.dat contiene un elenco di parole ordinate in senso crescente, mentre il file testo.dat contiene un testo. Si scriva una programma che stampa sul monitor la parola fra quelle contenute in parole.dat che ricorre più frequentemente in testo.dat. Se le parole di parole.dat che ricorrono più frequentemente in testo.dat sono più di una, viene stampata quella alfabeticamente minore.

3.    Siano date due liste circolari doppie a valori interi puntate da L1 e L2. Si scriva una funzione scambia_ultimi(L1,L2) che modifica le due liste scambiando fra loro l’ultimo elemento (si richiede cioè di staccare l’ultimo elemento di L1 e di L2 e di posizionarli rispettivamante in fondo a L2 e a L1). Si tenga presente che entrambe le liste sono composte da almeno due elementi.

4.    Data la seguente mappa di Karnaugh si determini il valore delle uscite “non specificate” in modo da ottenere la forma minima ottimale.

1

-

-

 

 

-

-

 

 

 

 

 

-

1

1

-

 

10

10

10

3


Esercizio n.1.

 

//treno.h

const int N=15;

const int M=80;

enum bool {F, T};

enum posizione {W, N};

 

class treno {

            int T[N][M];

public:

            bool prenota (posizione p);

            void libero_posto (int i, int j);

            void prenota_carrozza();

            treno();

}

 

//treno.cc

 

# include “treno.h”

#include <iostream.h>

 

treno::treno()

{

for (int i=0; i<N; i++)

            for(int j=0; j<M; j++)

                        T[i][j]=0;

}

 

bool treno:: prenota (posizione p) {

int i, finer;

if (p==W)

for (int i=0;i<N; i++) {

            for(int j=0; j<M; j=j+2)

            if (T[i][j] == 0

{T[i][j]=1;

return T;

}}

return F;

else

for (int i=0;i<N; i++) {

            for(int j=1; j<M; j=j+2)

            if (T[i][j] == 0

{

            T[i][j]=T;

            return T;

            }}

            return F;}

}

 

 

void treno::libera_posto(int i, int j)

{

if ((i<0) || (i>N) || (j<0) || (j>M))

{

cout << “indici posto sbagliati\n”;

return;

}

A[i][j]==F;

}

 

void treno::prenota_carrozza() {

for(int i=0; i<N; i++)

{

for(int j=0; j<M; j++)

{

if (T[i][j]==0) cont++;

}

if (cont==M)

{for(int j=0; j<M; j++)

T[i][j]==1;

return T;

}}

 

return F;

}

 

 

esercizio n.2.

#include <string.h>

 

main() {

int maxw=0;

int contw=0;

char* w1, w2, freqw;

fstream f, g;

 

f.open (parole.dat, ios::in);

while(f>>w1)

{

g.open(testo.dat, ios::in)

while(g>>w2)

{

if (strcmp(w1, w2)==0)

            contw++;

}

if (contw>maxw) {      strcpy(w1, freqw);

                                   maxw=contw; }

contw=0;

g.close();

}

if (maxw==0) cout<<”nessuna occorrenza\n”;

else cout<<freqw<<”\n”;

}

 

 

esercizio .3.

struct elem {   int info;

                        elem* next;

                        elem* prec; }

 

void scambia_ultimi (elem* L1, elem* L2)

{

elem *aux1, *aux2;

aux1=L1;

aux2=L2;

 

// posizionamento sull’ultimo elemento

aux1=L1->prec;

aux2=L2->prec;

 

// modifica liste

aux1->prec->next=aux2;

L1->prec=aux2;

aux2->prec->next=aux1;

L2->prec=aux1;

 

aux1->next=L2;

aux2->next=L1;

 

elem* aux3;

aux3=aux1->prec

aux1->prec=aux2->prec,

aux2->prec=aux3,

}