ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 02/02/2004 - C++
1. Un parcheggio multilivello è rappresentabile mediante una matrice P a valori booleani di dimensione NxM. N rappresenta il numero di livelli del parcheggio e M il numero di posti auto di ciascun livello. Si definisca una classe Park ogni oggetto della quale rappresenta un parcheggio. Sugli oggetti di tale classe è possibile effettuare le seguenti operazioni:
2.
Sia dato un file persone.txt che contiene
per ciascuna riga una stringa di al più 24 caratteri e un valore intero che
rappresentano rispettivamente il nome e l’età di una persona. Si scriva una
funzione nuovo_elenco() che crea un nuovo file n_persone.txt
che contiene tutte le righe di persone.txt ad eccezione
di quelle che corrispondono alle persone di età minima.
3.
Sia data una lista semplice l i cui elementi hanno due
campi informativi, info_int di tipo intero e info_car
di tipo char. La lista l è ordinata in senso crescente
prioritariamente in base al valore del
campo info_int e secondariamente in base al valore del campo info_car.
Si scriva una funzione inserisci(l, n, x) che riceve in ingresso la
lista l, un valore intero n e un carattere x
e inserisce un nuovo elemento in l con campo info_int
uguale a n e campo info_car uguale a x
mantenendone l’ordinamento.
4. Dati i numeri decimali A=111, B=-88 e C=-59, si determini il minimo numero di bit necessari per rappresentare contemporaneamente i suddetti numeri in complemento a 2 e se ne dia la rappresentazione. Utilizzando poi lo stesso numero di bit, si esegua l’operazione D=B-C e si discuta se il risultato ottenuto è o no significativo.
Punteggio:
Es.1 |
Es.2 |
Es.3 |
Es.4 |
10 |
10 |
10 |
3 |
1.
//Park.h
const int N=5;
const int M=40;
class Park {
boolean P[N][M];
public:
boolean
ingresso ();
void
uscita (int i, int j);
int posti_liberi();
Park();
}
//Park.cc
# include “Park.h”
#include <iostream.h>
Park::Park()
{
for (int i=0; i<N; i++)
for(int j=0; j<M; j++)
P[i][j]=false;
}
boolean Park:: ingresso () {
for(int i=N-1; i>=0; i--)
for(int j=0; j<M; j++)
if(P[i][j]==false)
{ P[i][j]=true;
return true;
}
return false;
}
void Park::uscita(int i, int j)
{
if ((i<0) || (i>N-1)
|| (j<0) || (j>M-1))
{
cout << “indici posto
sbagliati\n”;
return;
}
P[i][j]==false;
}
int Park::posti_liberi() {
int conta=0;
for (int i=0; i<N, i++)
for(int j=0; j<M; j++)
if (P[i][j]) conta++;
cout<<”numero posti liberi: “<<conta<<
“\n”;
}
2.
#include <fstream.h>
void nuovo_elenco()
{
fstream leggi, scrivi;
char nome[25];
int eta, eta_min;
leggi.open(“persone.txt”, ios::in);
scrivi.open(“n_persone.txt”,
ios::out);
if (leggi>>nome>>eta)
eta_min=eta;
else
{ scrivi.close();
return;
}
while(leggi>>nome>>eta)
if(eta<eta_min)
eta_min=eta;
leggi.close();
leggi.open(“persone.txt”, ios::in);
while((leggi>>nome>>eta)
if(eta>eta_min)
scrivi<<nome<<eta;
scrivi.close(),
leggi.close();
}
3.
struct elem
{ int info_int;
char info_char;
elem* next; };
void inserisci(int n, char x,
elem *&l)
{
elem *aux, *aux1, *aux2;
aux2=new elem ;
aux2->info_int=n;
aux2->info_car=x ;
if(l==0) { aux2->next=0;
l=aux2;
return;
}
if(l->info_int>v ||
(l->info_int==n && l->info_car>x)) // inserimento in testa
{ aux2->next=l;
l=aux2 ;
return,
}
for(aux=l ;
(aux->info_int<n || (aux->info_car<x &&
aux->info_int==n) && aux !=0) ; aux=aux->next)
aux1=aux ;
aux2->next= aux ;
aux1->next = aux2 ;
}