PDA

View Full Version : {C++} COme caxxo si fa????


Vortex Surfers
21-02-2003, 08:33
Ragazzi ho bisogno di aiuto!!!!
Allora linguaggio C++ ambiente .NET; ho delle variabili CString in cui memorizzo in realta' una data (non posso fare altrimenti :rolleyes: ) es. m_sDato = "21/02/03 8:25:30", ora io questi dati li devo ordinare dal piu' piccolo al piu' grande e non so' come caxxo fare :muro: pensavo di convertirli in variabili CTime ma non so come riuscirci :muro: AIUTO!!!!!!!

:cool:

lombardp
21-02-2003, 08:40
Io per ordinare date in formato testo ho usato un metodo molto rozzo: ho scritto la data nel formato "ANNO/MESE/GIORNO ORA:MINUTI:SECONDI" e poi faccio un ordinamento alfabetico.

Kleidemos
21-02-2003, 09:01
Originally posted by "Vortex Surfers"

Ragazzi ho bisogno di aiuto!!!!
Allora linguaggio C++ ambiente .NET; :cool:

intendi Visual C++ 7 contenuto in Visual Studio.NET?

Vortex Surfers
21-02-2003, 12:36
Originally posted by "Kleidemos"



intendi Visual C++ 7 contenuto in Visual Studio.NET?

Yep! :)

Vortex Surfers
21-02-2003, 12:37
Originally posted by "lombardp"

Io per ordinare date in formato testo ho usato un metodo molto rozzo: ho scritto la data nel formato "ANNO/MESE/GIORNO ORA:MINUTI:SECONDI" e poi faccio un ordinamento alfabetico.

E funziona...mi spieghi meglio come? :confused:

cionci
21-02-2003, 12:40
Ti fai un vettore di CTime...
Per fare l'ordinamento basta usare l'operatore < o > che confronta due CTime...

Per inizializzare ogni elemento del vettore fai in questo modo :

vector<CTime> v;

....
int anno, mese, giorno, ore, minuti, secondi;
sscanf((LPCTSTR)m_sDato, "%d/%d/%d %d:%d:%d", &giorno, &mese, &anno, &ore, &minuti, &secondi);

anno += (anno >= 70) ? 1900:2000;

v.push_back(CDate(anno, mese, giorno, ore, minuti, secondi));

Ora basta un normale ordinamento sul vettore ;)

Kleidemos
21-02-2003, 12:40
Originally posted by "Vortex Surfers"



Yep! :)

c'e lo anche io!
Fare cosi?

int giorno, mese, anno, commpleta;

public virtual int dataCompleta(){
completa = giorno + mese + anno;
return completa;
}


E poi ti crei una funz che ti mette / tra i numeri ;)

cionci
21-02-2003, 12:43
Originally posted by "Kleidemos"



int giorno, mese, anno, commpleta;

public virtual int dataCompleta(){
completa = giorno + mese + anno;
return completa;
}

Anche serve la somma di anno, giorno e mese ?

Kleidemos
21-02-2003, 12:55
Originally posted by "cionci"


Anche serve la somma di anno, giorno e mese ?

era una mia stupida idea :D

cionci
21-02-2003, 13:01
Prima di dire che è stupida esponila ;)

Kleidemos
21-02-2003, 13:05
Originally posted by "cionci"

Prima di dire che è stupida esponila ;)

Pensavo di usare 2 funz una dataFormattata() che è quella, l'altra mi metteva un carattere / tra il giorno, il mese e l'anno!
Che ne dici?

cionci
21-02-2003, 13:07
Spiegami a cosa ti servirebbe quella funzione sopra...

Kleidemos
21-02-2003, 13:11
Originally posted by "cionci"

Spiegami a cosa ti servirebbe quella funzione sopra...

a unire in una unica stringa giorno, mese anno.
Ti faccio un esempio:
// ........................................
dataCompleta("18", "04", "1988");// completa = 18041988
// formattiamo
formatDate(completa);// completa = 18/04/1988
cout<< "La data è " << completa<<endl;//Stampera 18/04/1988
//..................................

cionci
21-02-2003, 13:16
Comunque lui ha già la data formattata, ma gli serve un metodo per ordinare più date...

In ogni caso hai sbagliato il tipo per quella funzione...dovrebbe essere string...se usi l'int te li somma fra di loro...
Per formattare la data bastava fare una cosa del genere :

public virtual string dataCompleta(string giorno, string mese, string anno){
string completa = giorno + "/" + mese+ "/" + anno;
return completa;
}

Sperando di non aver sbagliato la sintassi del C#...

Kleidemos
21-02-2003, 13:18
e vero!
Che merda che sono!
Quindi interi stanno anche in string?

Cmq la funzione che dalla string cvon la data attaccata a quello formattata ..............tu come l'avresti fattA?

cionci
21-02-2003, 13:21
Originally posted by "Kleidemos"

Cmq la funzione che dalla string cvon la data attaccata a quello formattata ..............tu come l'avresti fattA?
Se li sommavi come facevi prima avrebbe perso ogni significato il numero...
comunque avrei convertito in stringa il numero e ci avrei lavorato prendendo sottostringhe del numero...

Kleidemos
21-02-2003, 13:22
un esempietto per i deficenti come me?



Tnk Mito

Vortex Surfers
21-02-2003, 13:32
Originally posted by "cionci"

Ti fai un vettore di CTime...
Per fare l'ordinamento basta usare l'operatore < o > che confronta due CTime...

Per inizializzare ogni elemento del vettore fai in questo modo :

vector<CTime> v;

....
int anno, mese, giorno, ore, minuti, secondi;
sscanf((LPCTSTR)m_sDato, "%d/%d/%d %d:%d:%d", &giorno, &mese, &anno, &ore, &minuti, &secondi);

anno += (anno >= 70) ? 1900:2000;

v.push_back(CDate(anno, mese, giorno, ore, minuti, secondi));

Ora basta un normale ordinamento sul vettore ;)

Grazie mille ora provo!!!!
Mi spieghi meglio cosa fa linea per linea?
:D

cionci
21-02-2003, 13:38
Sai usare i vector della Standard Template Library ?
Se non sai come usarli, in pratica sono dei vettori dinamici il cui tipo è specificato tramite quel <CTime>...

//dichiaro un vettore di CTime vuoto per ora
vector<CTime> v;

....
int anno, mese, giorno, ore, minuti, secondi;
//inserisco nelle variabili i vari valori presi dalla stringa
sscanf((LPCTSTR)m_sDato, "%d/%d/%d %d:%d:%d", &giorno, &mese, &anno, &ore, &minuti, &secondi);

//visto che usi l'anno a soli due caratteri devo vedere se siamo
//nel 1900 o nel 2000...in tal caso sommo 1900 o 2000 (1970 è l'hanno in
//cui iniziano a contare la data i PC)
anno += (anno >= 70) ? 1900:2000;

//aggiungo in fondo al vettore un nuovo elemento di tipo CTime
//costituito dagli elementi estratti dalla stringa precedentemente
v.push_back(CDate(anno, mese, giorno, ore, minuti, secondi));

Vortex Surfers
21-02-2003, 13:45
Sì conosco abbastanza i vector (anche se ho avuto problemi quando ho provato a inserirne uno in una classe, app come si fa? :) )
Non avevo mai usato invece la funzione sscanf (in c usavo scanf) che è proprio quella che mi permette di superare lo scoglio più grande....Spettacolo;
volevo chiederti cosa fa CDate(anno, mese, giorno, ore, minuti, secondi) mi converte in CTime o in CDate, è uguale?

GRAZIE MILLE SOPRATUTTO PER LA RAPIDITA' PROGRAMMI DA MOLTO???

cionci
21-02-2003, 16:17
Scusa...ho sbagliato il costruttore... CTime...non CDate ;)

Per inserire i vector metti #include <vector> nel file in cui li vuoi usare e poi metti using namespace std; dopo gli include...

Beh sì...è da molto che programmo... Diciamo che ho iniziato a studiare il C in seconda o terza media (non ricordo)... Praticamente più o meno 12 anni...

Vortex Surfers
21-02-2003, 19:56
Originally posted by "cionci"

Scusa...ho sbagliato il costruttore... CTime...non CDate ;)

Per inserire i vector metti #include <vector> nel file in cui li vuoi usare e poi metti using namespace std; dopo gli include...

Beh sì...è da molto che programmo... Diciamo che ho iniziato a studiare il C in seconda o terza media (non ricordo)... Praticamente più o meno 12 anni...

Sì mi ero accorto ;) e ci sono riuscito Grazie ancora davvero!!!!
Abbiamo + o - la stessa età allora io ho 23 anni :cool:

cionci
21-02-2003, 19:58
Io ne ho 26 compiuti da poco ;)

Vortex Surfers
21-02-2003, 20:10
;) hehehehe AUGURI!!!

Senti non voglio romperti le balle + di tanto ma qua la ricerca non funge e io lunedì volevo fare una cosa se ne l fine sett riesci mi dai un consiglio su questo...
Ho una funzione dichiarata in un file .h e definita nell'omonimo .cpp ora vorrei poterla usare in un altro file cpp (anche lui con relativo .h) per separare il codice su più file...pensavo alle funzioni friend ma non so bene come si usino tu ke consiglio mi dai....

GRAZIE ANKORA DI TUTTO.... ;)

cionci
21-02-2003, 20:17
Mi faresti un esempio ? Sinceramente non c'ho capito molto...

Vortex Surfers
21-02-2003, 20:59
Ah ok allora vediamo se riesco a spiegarmi...io ho creato una classe che contiene diverse funzioni alcune di queste funzioni le dovrei utilizzare anche in una nuova classe che ho creato sempre io si può fare??? :muro: :D :cool:

cionci
22-02-2003, 01:32
Ah...in una classe...
Sì...lo puoi fare con friend...anche se sinceramente è un cosa che mi piace poco e non ho usato spesso...

Che rapporto c'è fra le due classi ?

Fai conto che "Uno" sia una classe...

class Due {
...
friend Uno;
public:
....
};

In questo modo tutte le funzioni private di Due sono utilizzabili anche da Uno...altrimenti :

class Due {
...
friend Uno::f();
public:
....
};

La funzione Uno::f() può richiamare le funzioni private di Due...

Vortex Surfers
22-02-2003, 14:28
In pratica la mia classe uno racchiude le principali funzioni di un programma che sto sviluppando, le linee di codice di questa classe sono parecchie ed ora dato che devo sviluppare una funzione che sarà molto lunga lo vorrei fare in una nuova classe.
Da questa funzione però ne dovro richiamare alcune che già ho svilupato nella prima e quindi devo fare in modo di "vederle" nche all'interno di questa nuova per non doverle riscrivere esattamente uguali.....

P.S. nell'esempio di prima le classsi si chiamano entrambe con lo stesso nome :confused: credo comunque di aver capito che la prima è la uno e la seconda è la due.... ;)

Vortex Surfers
22-02-2003, 14:29
Originally posted by "Vortex Surfers"


P.S. nell'esempio di prima le classsi si chiamano entrambe con lo stesso nome :confused: credo comunque di aver capito che la prima è la uno e la seconda è la due.... ;)

Ho detto una cxxata.... :muro: cmq le funzioni della prima sono tutte public...

cionci
22-02-2003, 18:34
Se sono public e non hai bisogna di accedere ai dati privati allora non hai bisogno di usare friend...
Attento che la suddivisione in due classi deve avere una certa logica e non perchè un file è diventato troppo lungo ;)