Newsgroup: it.comp.programmare
Titolo: matrice di byte

Come posso realizzare una matrice contenente come valori stringhe di bit, e
poi fare il confronto riga per riga con un vettore dato in ingresso?
Grazie, Angelo.


Ahem.... in quale linguaggio di programmazione ??
Le tue "stringhe di bit" hanno lunghezza fissa o
devono/possono cambiare ?
Cosa intendi per confronto tra due stringhe di bit ?
E il "vettore dato in ingresso" cosa e' ? una stringa di bit ?
Quali sono le dimensioni in gioco ?
Stringhe di 10,100, un milione di bit ?
Matrici di 10, 100, un milione di strighe ?
L'implementazione cambia anche a seconda delle dimensioni
dell'oggetto in questione....
ciao,
g.

Scusa, sono un cretino.
Il linguaggio programmazione è il C, le stringhe di bit in effetti sono
byte. La matrice deve avere 6 righe e 7 colonne,quindi  per un totale di 7
byte per riga, tutte le righe. Il vettore dato in ingresso è o un vettore di
7 byte, in modo tale che possa essere confrontato con ciacsuna riga della
matrice.
Grazie, Angelo.
Giovanni Resta <g.r...@iit.cnr.it.nospam> wrote in message
3E4CFF20...@iit.cnr.it.nospam...


 matrice.
Mah...
un byte e' un "unsigned char"
quindi senza complicarsi troppo la vita tu hai
una matrice M e un vettore V  di unsigned char
unsigned char M[6][7];
unsigned char V[7];
e a questo punto per controllare se sono uguali
basta un loop sulle righe e uno sulle colonne:
/* Questa funzione controlla se sono uguali due vettori di 7 unsigned
char */
inline int uguale(unsigned char *a, unsigned char *b)
{
   int i;
   for (i=0; i<7; i++)
       if (a[i]!=b[i]) return 0;
   return 1;
}
int main(.....)
{
   int i;
.........
   for (i=0; i<6; i++)
       if (uguale(V,M[i]))
           printf("La riga %d-esima coincide col vettore\n",i+1);
.........
}
Naturalmente uno puo' fare anche delle cose piu' sofisticate !
Per esempio il controllo viene piu' veloce
se invece di allocare 7 byte ne allochi 8 e l'ultimo lo metti
sempre a 0 (sia in M che in V).
A quel punto per controllare l'uguaglianza di due vettori
basta fare cosi'
inline int uguale8(unsigned char *a, unsigned char *b)
{
   int *A, *B;
   A=(int *)a; B=(int *)b;
   if ((*A != *B) || (*(++A) != *(++B))) return 0;
   else return 1;
}
ciao,
g.

 wrote in message
3E4D17B7...@nospa.nospa.iit.cnr.it...


 '00000000','00000000','00000000'};
Ovviamente NO!
(Scusa, ma stai tentando di imparare il C a tentativi ???
Non hai un manuale ? Quarda le prime pagine dove spiegano
come si scrivono i numeri e i tipi di dato elementare
(non sto scherzando!))
il singolo apice serve per specificare un SINGOLO carattere
come per esempio 'x'  o 'A'. Quindi scrivere '00000' e' sbagliato
gia' di suo. Per specificare una stringa bisogna usare i doppo apici:
"ciao".
Nel tuo caso dovresti scrivere
unsigned char M[2][7]={{0x90,0x02,0x01,0x01,0x00,0x00,0x00},
{0x01,0x04,0x09,0x12,0x18,0x01,0x02}};
e idem con patatine per V (ma mi sono rotto di
convertire pseudo-binario in esadecimale...).
In C non c'e' un modo per specificare i numeri in codice
binario come hai tentato di fare tu
(anche perche' e' noiosissimo): pero' puoi
farlo come l'ho fatto io in esadecimale.
Al massimo puoi specificare i numeri in binario come
un array di int o char tipo
int unbyte[8]={0,1,0,0,1,1,1,0};
e poi ti scrivi una funzione che ti converte un array di 8
interi (0/1) nel corrispondente byte. Ma direi che
e' uno spreco di tempo...
ciao,
g.

Grazie per il tuo aiuto.
Per quanto riguarda il manuale, uno c'è l'ho ma gli unsigned char non li
prende proprio in considerazione.
Ciao, Angelo.
Giovanni Resta <g.r...@iit.cnr.it.nospam> wrote in message
3E4D233D...@iit.cnr.it.nospam...


Per immettere ibit che ti interessano devo convertire da binario a
esadecimale e poi
scrivi il numero corrispondente alla stringa di bit che vuoi.
Cosa dovrebbe fare esattamente questo programma, solo confronti?
Massimo