Newsgroup: it.comp.lang.c
Titolo: Modello per tenere traccia del tempo (lunghetto)

Salve a tutti ragazzi,
Sono alle prese con un problema da un paio di giorni diciamo che ho le idee
piuttosto chiare su come risolverlo ma ho difficoltà a scegliere la
struttura dati adatta...
Il problema è questo ho una funzione che viene richiamata passando in
ingresso un timestart e un timestop 2 unsigned int che rappresentano i
secondi rispettivamente di inizio e fine di un certo evento.
La funzione dovrebbe tener traccia all'interno di un ora dei secondi nei
quali l'evento è stato presente...
Non è molto chiaro facciamo un esempio:
In ingresso 9.00 e 9.10 allora io devo tracciare che all'interno di
quell'ora l'evento è stato attivo dal secondo 0 fino al secondo 600.
Fin qui è facile ma all'interno di un ora possono arrivare più eventi anche
sovrapposti es:
9.00-9.10
9.05-9.12
9.20-9.22
allora in questo caso non si contano eventi sovrapposti quindi l'evento
all'internod ell'ora è attivo da:
0-720
e
1200-1320
Spero sia sufficentemente chiaro... mi rendo conto che non è facile da
spiegare in poche righe.
Quello che vi chiedo comunque è come faccio a tracciare i secondi
all'interno di un ora nei queli l'evento è attivo...?
La prima soluzione che mi è venuta in mente è un super buffer di 3600 bit in
cui vado ad alzare il bit a uno se in quel secondo l'evento è stato attivo,
quindi poi contando il numero di flag alzati ottengo il numero di secondi
per i quali l'evento è stato attivo che è il risultato che mi serve...
Ora oltre che di difficile implementazione ( almeno per me ) vorrei
risparmiare spazio... e 450 byte sono tanti visto che tale operazione va
ripetuta per un array molto grande di eventi.
Ok spero che qualcuno riesca ad interpretare quello che ho scritto e sappia
aiutarmi!!!!
Ciao e un grazie anticipato a chi vorrà provarci.
Miko.

Secondo me il problema si risolve in maniera "semplice" utilizzando 
delle liste dinamiche (puntatori e compagnia bella). Oppure, facendo a 
meno delle liste, potresti usare degli array (ma io riuscirei meglio con 
le liste allocate dinamicamente).
Come risolvere quindi?
1 - Ti consiglio di convertire sia orainizio che orafine nel numero di 
secondi trascorsi dalla mezzanotte.
2 - La funzione deve cercare nella lista quel'è il posto per questi due 
nuovi dati, se c'è, oppure modificare quelli esistenti espandendoli 
secondo questi dati forniti.
Per cercare il posto per i nuovi dati, considera che:
  - Dati che si accavallano con quelli già presenti devono modificare 
questi ultimi;
  - Dati che NON si accavallano vanno aggiunti.
Quali sono i dati che si accavallano? I casi sono troppi. Meglio 
spiegare quali sono i dati che NON si accavallano.
La coppia (OraInizio, OraFine) fornita alla funzione è "corretta" (non 
si accavalla ma va aggiunta) se si verifica uno dei casi:
  1 - OraFine < OraInizio(1);
  2 - OraInizio > OraFine(n);
  3 - OraInizio > OraFine(i) E OraFine < OraInizio(i+1)
dove (1) indica il primo elemento della lista, (n) l'ultimo, (i) un 
elemento generico e (i+1) l'elemento successivo a (i).
A te la mazzarella :)
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, togli prima l'immondizia dalla testa ;)