PROGRAMMAZIONE AD OGGETTI 2001-2002

20-12-2001 (ESERCITAZIONE)

 

Numero esercizio Descrizione
ESERCIZIO 1 conversione di coordinate da cartesiane a polari mediante l'uso di costruttori e distruttori
ESERCIZIO 2 gestione della visualizzazione dell'ora attraverso costruttori e distruttori

 


 

ESERCIZIO 1

 

#include <iostream.h>
#include <math.h>

class cartpolar
{

private:

double cor_x, cor_y;
double cor_r, cor_a;

public:

cartpolar();
cartpolar(double, double, int);
~cartpolar();
void stampa();

};

 

/* Il primo costruttore, come si puo' vedere, inizializza gli attributi della classe a 0. */
cartpolar::cartpolar()
{

cor_x=0;
cor_y=0;
cor_r=0;
cor_a=0;

cout << "Sono il costruttore senza parametri" << endl;

}

/* Il secondo costruttore riceve come parametri 2 coordinate e un char. Se il carattere "sc" e' pari a "p" allora il costruttore trsforma le coordinate passate in polari. Se invece e' pari a "c" le trasforma in cartesiane. */
cartpolar::cartpolar(double x, double y, int sc)
{

cout << "-" << sc << "-" << endl;

if (sc == 1)
{

/* Trasformazione da cartesiana a polare*/
cor_r=sqrt((x*x)+(y*y));
cor_a=atan2(y,x);
cor_x=x;
cor_y=y;

}
else
{

if (sc == 2)
{

/* Trasformazione da polare a cartesiana*/
cor_x=(x*cos(y));
cor_y=(y*cos(y));
cor_r=x;
cor_a=y;

}
else

cout << "La scelta non vale" << endl;

}

cout << "Sono il costruttore con la scelta tra coordinate " << endl;

}

 

cartpolar::~cartpolar() {}

 

void cartpolar::stampa()
{

cout << "La coordinata cartesiana x: " << cor_x << endl;
cout << "La coordinata cartesiana y: " << cor_y << endl;
cout << "La coordinata polare r: " << cor_r << endl;
cout << "La coordinata polare a: " << cor_a << endl;

}

 

/* Nel main il primo costruttore crea l'oggetto coordinate, successivamente ne vengono stampati gli attributi per poi essere distrutto.
Il secondo costruttore crea un'altro oggetto con lo stesso nome del precedente a cui vengono passate le coordinate inserite dall'utente e la scelta di trasformazione delle coordinate da cartesiane a polari e viceversa */
void main()
{

double prima_coord, sec_coord;
int scelta;
cartpolar* coordinate;

{

coordinate = new cartpolar();
coordinate->stampa();

}

cout << "Inserisci la prima coordinata: "<< endl;
cin >> prima_coord;
cout << "Inserisci la seconda coordinata: "<< endl;
cin >> sec_coord;

cout << "Vuoi le coordinate polari (digita 1) o quelle cartsiane (digita 2)? ";
cin >> scelta;

coordinate = new cartpolar(prima_coord, sec_coord, scelta);

/* La funzione stampa visualizza a monitor il valore e gli attributi dell'oggetto */
coordinate->stampa();

}

 

 

 

Home


 

 

ESERCIZIO 2

 

/* Il programma realizza la gestione di un orario attraverso l'uso di classi. In particolare si ha una classe caratterizzata da 4 costruttori ciascuno dei quali setta l'oriaro in modo diverso.*/

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

class time
{

private:

int ore, minuti, secondi;
public:
time(int, int, int);
time(char*);
time(time*, int, int, int);
time(float);
~time();
void stampa();

};

 

/* Questo costruttore prende in ingresso dei valori interi e li assegna alle varibili private della classe.*/
time::time (int h, int m, int s)
{

ore = h;
minuti = m;
secondi = s;

}

 

/* Questo costruttore shifta l'ora gia' memorizzata in un altro oggetto della stessa classe e il nuovo orario viene memorizzato in un nuovo oggetto. */
time::time (time* t, int h, int m, int s)
{

t->ore+= h;
t->minuti+= m;
t->secondi+= s;

}

 

/* Quest'ultimo costruttore genera un nuovo oggetto della classe time settando i valori di ore e minuti dal float passato per argomento. */
time::time (float num)
{

int intero;
float deci;

intero=(int)num;
deci=num-intero;

ore=intero-(24*((int)(intero/24)));
minuti=(int)(60*deci);
secondi=0;

}

 

/* Questo costruttore, invece, prende in ingresso una stringa del formato oo:mm:ss e, ricavandone i valori numerici di ora minuti e secondi, li memorizza nelle variabili private della classe. */
time::time (char* orario)
{

char* ch;
int value=0;

ch=strtok(orario,":");
ore=atoi(ch);

ch=strtok(0,":");
minuti=atoi(ch);

ch=strtok(0,":");
secondi=atoi(ch);

}

 

time::~time () {}

 

void time::stampa()
{

cout << "L'ora: " << ore << endl;
cout << "I minuti: " << minuti << endl;
cout << "I secondi: " << secondi << endl;

}

 

void main ()
{

float num;
time* now;
time* now1;
char *line;
line = new char[128];
int hour=0;
int minute=0;
int second=0;
int scelta;

cout << "Vuoi inserire dei valori per l'ora? (1=yes, 2=no) ";
cin >> scelta;

if (scelta==1)
{

cout << "Inserisci l'ora: ";
cin >> hour;
cout << "Inserisci i minuti: ";
cin >> minute;
cout << "Inserisci i secondi: ";
cin >> second;

}

{

now = new time(hour, minute, second);
now->stampa();

}

{

cout << "inserisci un orario (es: 02:15:07): ";
cin >> line;
now = new time(line);
now->stampa();


cout << "inserisci l'incremento dell'ora: ";
cin >> hour;
cout << "inserisci l'incremento dei minuti: ";
cin >> minute;
cout << "inserisci l'incremento dei secondi: ";
cin >> second;

now1=new time(now, hour, minute, second);
now1->stampa();

}

{

cout << "inserisci un numero float: ";
cin >> num;
now = new time(num);
now->stampa();

}

}

 

 

Home