Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Classe Coordinate
Forum - C/C++ - Classe Coordinate

Avatar
il-david (Normal User)
Newbie


Messaggi: 10
Iscritto: 22/12/2009

Segnala al moderatore
Postato alle 10:06
Lunedì, 04/01/2010
Buongiorno a tutti ed auguri di buon anno:) Vi giro questa traccia d'esame con relativo mio abbozzo, sperando in un vostro suggerimento.

-Scrivere il codice per una classe "coordinate" che gestisce latitudine(-90.0;+90.0) e longitudine (-180.0;+180.0) di un punto. L'oggetto può essere inizializzato in fase di dichiarazione o con specifica funzione membro; ha una funzione per ottenere i valori settati; è possibile settare un oggetto a partire da somme e sottrazioni di oggetti dello stesso tipo (A=B+C; A=B-C); valori fuori dal range vengono riportati nel range tramite modulo (es: (+70.0;+100.0)+(+30.0;+120.0)=(-80.0;-140.0)). Valutare l'oppurtunità/necessità di scrivere un costruttore di copie.

Codice sorgente - presumibilmente C#

  1. class Coordinate
  2. {
  3.    double latitudine, longitudine;
  4.    public:
  5.       Coordinate(double lat, double lon) : latitudine(lat), longitudine(lon) {
  6.          cout<<"Costruttore..."<<endl;
  7.       }
  8.       Coordinate(const Coordinate& c) : latitudine(c.latitudine), longitudine(c.longitudine) {
  9.          cout<<"Costruttore di copia..."<<endl;
  10.       }
  11.       ~Coordinate() { cout<<"Distruttore..."<<endl; }
  12.       Coordinate operator+(Coordinate& o) {
  13.          cout<<"Overloading +..."<<endl;
  14.          Coordinate tmp(latitudine + o.latitudine, longitudine + o.longitudine);
  15.          return tmp;
  16.       }
  17.       Coordinate operator-(Coordinate& o) {
  18.          cout<<"Overloading -..."<<endl;
  19.          Coordinate tmp(latitudine - o.latitudine, longitudine - o.longitudine);
  20.          return tmp;
  21.       }
  22. };



I dubbi in particolare sono:

1-come faccio a stabilire un preciso range di coordinate per la
latitudine e longitudine?

2-L'oggetto può essere inizializzato in fase di dichiarazione o con
specifica funzione
membro;

3-ha una funzione per ottenere i valori settati;

4-valori fuori dal range vengono riportati
nel range tramite modulo (es: (+70.0;+100.0)+(+30.0;+120.0)=
(-80.0;-140.0)).

Ultima modifica effettuata da il-david il 04/01/2010 alle 19:12
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:37
Lunedì, 04/01/2010
Ciao.

Ho letto il tuo programma, e posso rispondere che:

1° Per stabilire un reng per le coordinate si può usare la seguente funzione:
void Coordinate::overload()
{
   latitudine=fmod((90+latitudine), 180)-90;
   longitudine=fmod((180+longitudine), 360)-180;
}
- (fmod(x, y) calcola il resto, "con la virgola", della divisione tra x e y, e fa parte della libreria math.h)

2° E' possibile dichiarare un secondo costruttore, per inizializzare l' oggetto.

3° Non ho capito questo quesito. Intendevi una funzione che restituisca la latitudine e longitudine?

4° Si! Grazie alla funzione overload.

Ecco la classe Coordinate al completo:
Codice sorgente - presumibilmente C/C++

  1. class Coordinate
  2. {
  3.    double latitudine, longitudine;
  4.    public:
  5.       Coordinate(double lat, double lon) : latitudine(lat), longitudine(lon) {
  6.          cout<<"Costruttore..."<<endl;
  7.          overload();
  8.       }
  9.       Coordinate() : latitudine(0.0), longitudine(0.0) {
  10.          cout<<"Secondo costruttore..."<<endl; }
  11.       Coordinate(const Coordinate& c) : latitudine(c.latitudine), longitudine(c.longitudine) {
  12.          cout<<"Costruttore di copia..."<<endl;
  13.          overload();
  14.       }
  15.       ~Coordinate() { cout<<"Distruttore..."<<endl; }
  16.       Coordinate operator+(Coordinate& o) {
  17.          cout<<"Overloading +..."<<endl;
  18.          Coordinate tmp(latitudine + o.latitudine, longitudine + o.longitudine);
  19.          return tmp;
  20.       }
  21.       Coordinate operator-(Coordinate& o) {
  22.          cout<<"Overloading -..."<<endl;
  23.          Coordinate tmp(latitudine - o.latitudine, longitudine - o.longitudine);
  24.          return tmp;
  25.       }
  26.       void overload();
  27.       double GetLatitudine() { return latitudine; }
  28.       double GetLungitudine() { return longitudine; }
  29. };
  30.  
  31. void Coordinate::overload()
  32. {
  33.    latitudine=fmod((90+latitudine), 180)-90;
  34.    longitudine=fmod((180+longitudine), 360)-180;
  35. }


PM Quote
Avatar
il-david (Normal User)
Newbie


Messaggi: 10
Iscritto: 22/12/2009

Segnala al moderatore
Postato alle 10:56
Martedì, 05/01/2010
Grazie mille, ora è perfetto:)

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:10
Martedì, 05/01/2010
Di nulla!:)

PM Quote