ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 17/02/2005 - C++
1. Si definisca una classe che rappresenta una
lista di attesa con priorità FIFO (First In First Out). La lista di attesa è rappresentabile
mediante una lista semplice i cui elementi hanno nel campo informativo una
stringa di lunghezza massima 24 caratteri. Le possibili operazioni sono:
• L_A(): costruttore che crea una
lista vuota;
• in_attesa(nome): se non esiste alcun elemento con il campo
informativo uguale a nome viene inserito un nuovo elemento in coda alla lista
e si restituisce true, altrimenti la lista non viene modificata e si
restituisce false;
• chiamata(): se la lista non è vuota, elimina l’elemento
in testa alla lista;
• ~L_A(): distruttore che dealloca la lista.
2. Un file chiamato numeri.dat contiene un insieme di valori interi positivi. Scrivere una funzione
booleana cerca() che cerca nel file i valori multipli di 3. Se il file contiene almeno
un multiplo di 3 la funzione stampa il più grande multiplo di 3 e restituisce True, altrimenti restituisce False.
3.
Sia
data una matrice M di dimensione NxN a valori interi maggiori di
zero. Si scriva una funzione non_nulle(M) che riceve in ingresso la
matrice M e restituisce il numero totale di righe di M che hanno almeno un valore diverso da zero.
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 |
11 |
9 |
10 |
3 |
1.
//L_A.h
struct elem {
char*
nome;
elem *
next; };
class L_A {
elem*
l;
public:
L_A()
{l=0;};
boolean in_attesa (char
nome[25]);
void chiamata ();
~L_A(); }
//L_A.cc
#include <string.h>
#include "L_A.h"
boolean L_A:: in_attesa(char nome[25])
{
elem *aux, *aux1;
if(l==0) { aux=new
elem ;
strcpy(aux->info,
nome);
aux->next
=0;
return
true; }
aux=l->next;
aux1=l ;
boolean trovato=false ;
while(aux !=0)
{
if(strcmp(aux->nome, nome)==0)
trovato=true;
aux1=aux;
aux=aux->next;
}
if(trovato) return false ;
aux=new elem;
strcpy(aux->info, nome);
aux->next=0;
aux1->next=aux ;
return
true ;
}
void
L_A::chiamata()
{
if (l==0) return;
elem
*aux ;
aux=l ;
l=l->next;
delete
aux;}
L_A::~L_A() {
elem* aux=l;
while
(aux!=0) {
l=l->next;
delete aux;
aux = l;
}
}
2.
#include <fstream.h>
bool
cerca(int n)
{
fstream f;
int num;
int n_max=0;
f.open (“numeri.dat”, ios::in);
while(f>> num)
{
if
(num%3==0)
{
if(num>m_max)
n_max=num;
}
}
f.close();
if (n_max>0)
{
cout<<n_max;
return true; }
return false;
}
3.
const int N=26;
int non_nulle(int M[N][N])
{
int
cont=0 ;
int
cont_R=0 ;
for(int i=0; i<N; i++)
{
for(int
j=0; j<N; j++)
cont+=M[i][j];
if(cont>0)
cont_R++;
cont=0;
}
return cont_R;
}