Newsgroup: it.comp.lang.c++
Titolo: la tabella di verità... AIUTO!

ho tentato di scrivere un programma che crei la tabella di verità con N
colonne (sotto c'è n'è un esempio a tre colonne), ma quello che ne è uscito
(e che allego) non funziona... sapreste dirmi come mai?
l'idea su cui si basa è semplice: il numero che identifica la colonna è lo
stesso numero a
cui si deve elevare 2 per ottenere il periodo con cui lo 0 e l'1 si
alternano all'interno della stessa colonna.
2^0     2^1       2^2
------------------------
 0          0           0
 1          0           0
 0          1           0
 1          1           0
 0          0           1
 1          0           1
 0          1           1
 1          1           1
============================================================
for (i=0;i<n;i++)   /* "i" identifica le colonne della tabella di verita' */
{
        for (l=0;l<pow(2.0,n);l++) /* "l" è un semplice fattore di
moltiplicazione che viene usato nel ciclo for successivo */
            {
              for (k=0;k<(pow(2.0,i)+(l*pow(2.0,i))) &&
(pow(2.0,i)+(l*pow(2.0,i)))<due_max;k++)
                  {
                    if (l%2==0) matrix[i][k]=1;      /* Se il fattore di
moltiplicazione l è pari o dispari, l'elemento della matrice sarà 1 o 0 */
                        else matrix[i][k]=0;
                  }
            }
}
============================================================
Grazie sin d'ora alle anime buone che mi aiuteranno...
ciao, ric

 wrote in message
news:8eX46.6795$FF1.4...@twister1.tin.it...

Forse non ho capito molto bene quello che ti serve... ma nel caso che
il numero massimo di colonne sia <= 32 (2^32 combinazioni...ne hai gia` da
divertirti...)
puoi utilizzare una variabile 'unsigned long',
incrementarla fino a quanto ti serve e leggere bit per bit per ricavarti la
codifica binaria.
Per il tuo esempio di 3 colonne:
unsigned long Val;
int i, NumColonne;
NumColonne = 3;
for (Val = 0; Val < pow(2.0, NumColonne); Val ++)
{
    for (i = 0; i < NumColonne; i++)
    {
         matrix[Val][i] = ((Val >> i) & 0x01);
         ...
    }
}
Spero di esserti stato d'aiuto.
Roby :-)

const size_t nCols = 3;
int main(int argc, char* argv[])
{
	assert( nCols > 0 );
	assert( nCols <= sizeof(size_t)*8 - 1 );	// -1 avoids
overflow in nRows.
 
	size_t nRows =  static_cast<size_t> ( 1l << nCols );
	bool (*pTable)[nCols] = new bool [nRows][nCols];
	assert( pTable );  // TOTO: add error management here
	for (  size_t r = 0;  r < nRows;  r++  ) 
		for (  size_t c=0, bits=r;  c < nCols;  c++, bits >>= 1
) 
			pTable[r][c] = static_cast<bool> ( bits & 1 );
	// TOTO: add code that uses or displays table here
	return 0;
}
-- 
Posted from 
adsl-21-135.38-151.net24.it
 [151.38.135.21] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

potresti cortesemente spiegarmi cosa significa ">>" e " & 0x01 " ? grazie
ancora..


> è l'operatore di shift binario (a destra).
& è l'operatore di AND binario (bit a bit).
0x01 è 1 scritto in esadecimale.


const size_t nCols =3D 3;
Potremmo fare posting ASCII ? anche il topic di questo messaggio
mi appare abbastanza misterioso... (e credo che questo riguardi
chi come me usa un newsreader ASCII).
 Re:=?iso-8859-1?Q?Re=3A_la_tabella_di_verit=E0=2E=2E=2E_AI...
TIA
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

chi come me usa un newsreader ASCII).
Sto usando Outlook 2000 SR-1 settato in Plain Text e posto tramite
mailgate poiche' da questa macchina non posso accedere direttamente
a internet (salve le porte HTTP e SMTP).
Il topic me lo setta direttamente mailgate e il testo a me non pareva
avere nulla di irregolare. Io leggo 
const size_t nCols = 3;
(sperando che questo ti arrivi normale!)


 Il topic me lo setta direttamente mailgate e il testo a me non pareva...
Il topic probabilmente lo imposta direttamente Outlook, che aveva gia'
problemi del genere in versioni precedenti. Anche chi come me legge i
tuoi testi correttamente vede una sfilza di "Re: ". In piu' (sempre
Outlook, poiche' ho letto post inviati via Mailgate che non avevano
questi problemi) perde i riferimenti precedenti all'ultimo, impedendo ai
newsreader di ricostruire i thread.
Ciao,
Nicola

 pasticciati quando li cita l'altro Andrea
Free Agent (che usa l'altro Andrea) non riconosce il quoted-printable
(ad es: "=3D") e la codifica per usare charset non ascii negli header
(ad es: "=?iso-8859-1?Q?").
Per facilitare la lettura ad Andrea (e a molti altri) suggerisco a tutti
di:
 - disabilitare il quoted-printable; l'encoding a 8bit, se usiamo tutti lo
  stesso charset (iso-8859-1), non dovrebbe creare problemi a nessuno
  (nemmeno a chi usa Free Agent)
 - evitare l'uso di caratteri non ascii nel subject e in qualsiasi altro
  header.
Max

  header.
Hehehe... io voto a favore :) ... certamente non faccio fatica a non
usare accentate... sulla mia tastiera manco ci sono ... ;)
Scherzi a parte io penso che usare il plain ASCII dovrebbe essere
il sistema migliore per fare posting e mantenere la massima
leggibilita' per chiunque. Il quoted printable (purtroppo) usa il
carattere "=" come escape e nei sorgenti C++ questo carattere
compare in continuazione...
Se oggi accettiamo il quoted-printable magari domani qualcuno
pretendera' di usare HTML  ... dove andremo a finire ?
cosa ?
c'e' gia' chi usa HTML ???
hehehe
Vabbe'... vorra' dire che usero' la regola aurea di internet :) ...
non censurare gli altri ma censura te stesso
An%64r%65a
