Guardate,già che ci sto posto questo rompicapo che sto tentando di risolvere da giorni nell' agenda.
Posto la porzione di codice così è più comprensibile.
prima posto le variabili dichiarate e inizializzate precedentemente:
codice:
bool flag[26][14];
typedef struct
{
char targa;
int data [8];
char *oggetto;
char *testo;
}nota;
int num;
nota *ptr;
int oggi[4];
Vi spiego cosa devono contenere queste variabili:
ptr è un array di note,che ha come dimensione massima num (ptr[num-1]).
ptr[i].data è un array di 8 elementi,data[0] contiene il mese,che va da 1 a 12,data[1] il giorno,data[2] l' ora,data[3] i minuti.
data[4] contiene ancora un mese: in questo array di strutture,che leggo da file,ci sono già scritte correttamente delle note che contengono la data di inizio e la data di fine.
Se queste note sono presenti nel range settimanale si attiva il bit corrispondente.
oggi è un array di interi,anch'esso è un array contenente una data,e contiene la data del primo lunedì della settimana.
In questo ciclo sto tentando disperatamente di scrivere sulla matrice di bool con questo criterio:
Quando nel ciclo for trovo che una nota ha la data compresa nel range settimanale (deve innanzitutto avere lo stesso mese di oggi[0],poi avere il giorno (ptr[i].data[1] o ptr[i].data[5]) che va da oggi[1] a oggi[1]+7.
Si deve attivare il bit corrispondente all' orario,ma ogni nota ha una targa.
ptr[i].targa dice che tipo di nota è ('M','R','A','I').
Successivamente passo la matrice di bit a una funzione (che ho verificato che si comporta correttamente) che a seconda di come gli passo l' array di bit di 14 elementi (&flag[i][0]) stampa M se nel posto giusto.
Ho difficoltà a spiegare questo "nel posto giusto",vi posto un' immagine:

http://img193.imageshack.us/img193/2108/prompti.png
In pratica come vedete stampa tutti gli R nella prima colonna.però le altre colonne le lascia bianche (e sono sicuro che la funzione per stampare la tabella funziona correttamente).Ma se trova delle note che hanno un giorno superiore a lunedì,deve stampare anche nella altre colonne.Mentre 'M' e 'A' essendo note memo e anniversario non hanno l' ora ma vengono stampate all' inizio della tabella.
Sembrerebbe che il criterio con cui assegno i bit è sbagliato:mi si attiva sempre solo il primo e il secondo bit (flag[i][0] e flag[i][1]) ma non so il perchè
codice:
for(i=0;i<num;i++)
{
if((ptr[i].data[0]==oggi[0]||ptr[i].data[4]==oggi[0])&&((ptr[i].data[1]>=oggi[1]&&ptr[i].data[1]<=oggi[1]+7)
||(ptr[i].data[5]>=oggi[1]&&ptr[i].data[5]<=oggi[1]+7)))
{
if(ptr[i].targa=='I')
{
flag[ptr[i].data[2]][(ptr[i].data[1]-oggi[1])*2]=true;
flag[ptr[i].data[6]][(ptr[i].data[5]-oggi[1])*2]=true;
}
else if(ptr[i].targa=='R')
{
int j=ptr[i].data[2];
while(j<=ptr[i].data[6])
{
flag[j][((ptr[i].data[1]-oggi[1])*2)+1]=true;
j++;
}
}
else if(ptr[i].targa=='M')
flag[0][(ptr[i].data[1]-oggi[1])]=true;
else
flag[0][(ptr[i].data[1]-oggi[1]+1)]=true;
}
Sto provando da giorni a farlo ma niente da fare,se quello che ho spiegato non vi è chiaro posso anche provare a rispiegare...non riesco proprio a fargli assegnare i bit correttamente