codice:
#include <stdio.h>
/* Macro per determinare le dimensioni di un array */
#define ARRSIZE(arr) ((size_t)(sizeof(arr)/sizeof(*arr)))
/* Funzione richiamata ricorsivamente da WriteCombinations */
void InternalWriteCombinations(int * values, size_t elements, int seqLength, char * buffer, char * writePtr, size_t availableSize);
/* Scrive le combinazioni di simboli contenuti nell'array values (il numero dei suoi elementi è contenuto in elements); le combinazioni saranno lunghe seqLength caratteri */
void WriteCombinations(int * values, size_t elements, int seqLength);
int main()
{
int values[]={1,2,3}; /* valori da utilizzare */
WriteCombinations(values,ARRSIZE(values),3); /* l'ultimo parametro è la lunghezza delle sequenze */
return 0;
}
void InternalWriteCombinations(int * values, size_t elements, int seqLength, char * buffer, char * writePtr, size_t availableSize)
{
int i, usedChars;
for(i=0; i<elements; i++)
{
usedChars=_snprintf(writePtr,availableSize,"%d ",values[i]);
if(seqLength>1)
InternalWriteCombinations(values,elements,seqLength-1,buffer, writePtr+usedChars,availableSize-usedChars);
else
puts(buffer);
}
}
void WriteCombinations(int * values, size_t elements, int seqLength)
{
char buffer[512];
InternalWriteCombinations(values, elements, seqLength, buffer, buffer, ARRSIZE(buffer));
}