PROGRAMMAZIONE AD OGGETTI 2001-2002

13-12-2001 (ESERCITAZIONE)

 

Numero esercizio

Descrizione
ESERCIZIO 1
utilizzo delle classi per calcolare l'area di un rettangolo
ESERCIZIO 2
utilizzo delle classi per calcolo di media, max e min dei voti
ESERCIZIO 3
 utilizzo delle classi per il calcolo dell'area di un quadrato
ESERCIZIO 4
utilizzo delle classi per la gestione di una biblioteca

 

ESERCIZIO 1

Primo esempio di utilizzo delle classi ove definiamo le varibili private e le funzioni di calcolo che lavorano su tali valori (dopo la direttiva public). In particolare abbiamo una funzione definita già nella classe ed un'altra definita esternamente attrverso l'opportuna sintassi:

tipo_restituito nome_classe::nome_funzione

     
 

#include <iostream.h>

class rettangolo
{

private:

double Altezza, Larghezza;

public:

double area()
{

return (Altezza*Larghezza);

}

void modifica(double, double);

};

 

void rettangolo::modifica(double altezza, double larghezza)
{

Altezza = altezza;
Larghezza = larghezza;

}

 

void main()
{

rettangolo r;
double h, w, ret;

cout << "inserisci l'altezza: ";
cin >> h;
cout << "inserisci la larghezza: ";
cin >> w;

r.modifica(h,w);
cout << "l'area : " << r.area() << endl;

}

 
     

 

Home


 

ESERCIZIO 2

Il programma utilizza una classe strutturata il un vettore di double che servirà per contenere dei voti sui quali poi viene effettuata la media, calcolato il massimo ed il minimo. Le funzioni associate alla classe sono tutte definite esternamente utilizzando la sintassi nota de
tipo_restituito nome_classe::nome_funzione
La funzione Voti::inserisci(double v) restituisce un valore booleano (true o false) ed inserisce i voti nel vettore finchè non c'è più spazio.
La inizializza azzera tutti i valori contenuti nel vettore, mentre le funzioni media, max e min calcolano la media e trivano il massimo voto inserito ed il minimo.

     
 

#include <iostream.h>

const int MAX = 100;

class Voti
{

private:
double voti[MAX];
int n;
public:
bool inserisci(double v);
void inizializza();
double media();
double max();
double min();

};

 

bool Voti::inserisci(double v)
{

if ((n>=MAX)||(v<0))

return false;

voti[n++]=v;
return true;

}

 

void Voti::inizializza()
{

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

voti[i]=0;

n=0;

}

double Voti::media()
{

if (n==0)

return -1;

double somma =0;
for (int i=0; i<n; i++)

somma+=voti[i];

return (somma/n);

}

 

double Voti::max()
{


if (n==0)

return -1;

double m = voti[0];
for(int i=1; i<n; i++)

if (m<voti[i])

m=voti[i];

return m;

}

 

double Voti::min()
{

if (n==0)

return -1;

double m = voti[0];
for(int i=1; i<n; i++)

if (m>voti[i])

m=voti[i];

return m;

}

 

void main()
{

Voti V;

V.inizializza();

cout << "inserisci un voto o scrivi un numero negativo per terminare: ";
for (int i=0; i<MAX; i++)
{

double voto;
cin >> voto;

if (voto<0) break;

V.inserisci(voto);

}

cout << " media: " << V.media() << endl;
cout << " max: " << V.max() << endl;
cout << " min: " << V.min() << endl;

}

 
     

 

Home


 

ESERCIZIO 3

Esempio di classe con veriabili private e funzioni che lavorano su di esse dichiarate ed in parte definite nella stessa classe. Il programma prende in ingresso un valore per la diagonale di un quadrato ed un altro per il lato di un diverso quadrato; viene restituita poi l'area dei due quadrati attraverso la funzione stampa. La funzione stampa non e dichiarata nella classe perciò nella sua definizione non si può utilizzare la sintassi nota (tipo_restutuito nome_classe::nome_funzione); la funzione viene definita normalmente ma in argomento prende il puntatore alla classe (potevamo passare anche tutta la classe ma in questo modo facilitiamo il compito del compilatore che imvece di ricopiare tutta la classe lavora su un semplice puntatore)

     
 

#include <iostream.h>

const double radice2 = 1.4142135624;

class quadrato
{

private:

double l, d;

public:

void impostaDiag(double);
void impostaLato(double);

double lato() { return l;
}
double diag() { return d;
}
double area() { return (l*l);
}

};

 

void quadrato::impostaDiag(double x)
{

d = x;
l = (x/radice2);

}

 

void quadrato::impostaLato(double x)
{

d = (x*radice2);
l = x;

}

 

void stampa(quadrato*q)
{

cout << "diagonale: " << q->diag() << endl;
cout << "lato: " << q->lato() << endl;
cout << "area: " << q->area() << endl;

}

 

void main ()
{

quadrato*q = new quadrato;
double x;

cout << "diagonale: ";
cin >> x;
cout << endl;
q->impostaDiag(x);
stampa(q);

cout << "lato: ";
cin >> x;
cout << endl;
q->impostaLato(x);
stampa(q);

}

     

 

Home


 

ESERCIZIO 4

Questo esercizio, realizzato da noi, utilizza le classi per la gestione di una bibblioteca. La funzione inizializza, permette di assegnare il prezzo e la posizione all'interno dello scaffale agli attributi "euro" e "scaf" della classe. La funzione "applicasconto" permette di applicare uno sconto del 20% sul prezzo per poi assegnarlo all'attributo "euro". La funzione stampa (chiarmente), visualizza a monitor l'intera bibblioteca.

 

#include <iostream.h>
#include <string.h>

const int max = 128;
int n, i;

class libro
{

private:

char Nlib[max];
double Euro;
unsigned int Scaf;

public:

void inizializza(char *, double, unsigned int);
void stampa();
void applicaSconto();

} *l;

 

void libro::inizializza(char *nlib, double euro, unsigned int scaf)
{

l[i].Euro = euro;
l[i].Scaf = scaf;
strcpy(l[i].Nlib,nlib);

}

void libro::stampa()
{

char ch;
for (i=0; i<n; i++)
{

cout << "Nome: " << l[i].Nlib << endl;
cout << "Prezzo: " << l[i].Euro << endl;
cout << "Scaffale: " << l[i].Scaf << endl;
cout << "voui applicare lo sconto: [y/n]";
cin >> ch;
if (ch=='y') l->applicaSconto();

}

}

 

void libro::applicaSconto()
{

double sconto;

sconto=(l[i].Euro*2/10);
l[i].Euro-=sconto;

cout << "Nome: " << l[i].Nlib << endl;
cout << "Prezzo scontato: " << l[i].Euro << endl;
cout << "Scaffale: " << l[i].Scaf << endl;

}

 

void main()
{

char nlib[max];
double euro;
unsigned int scaf;


cout << "quanti libri: " ;
cin >> n;
cout << endl;

if (n>0)

l = new libro[n];

else

cout << "ciao" << endl;

for (i=0; i<n; i++)
{

cout << "nome: ";
cin >> nlib;
cout << "prezzo: ";
cin >> euro;
cout << "scaffale: ";
cin >> scaf;
l->inizializza(nlib,euro,scaf);

}

l->stampa();

}

     

Home