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,
}