// ======================================================================================================
// Programma per il calcolo degli anagrammi di una parola immessa
// ======================================================================================================
#include <stdio.h>
#include <string.h>
#define MAX 50 // la parola sarà al massimo di 50 caratteri
int main(){
char stringa[MAX];
printf("+==============================================+\n"); printf("| ELABORAZIONE ANAGRAMMA |\n"); printf("+==============================================+\n"); printf(" Inserire una parola e premere invio \n");
printf("Le possibili combinazioni sono %d\n\n\a", fattoriale
(strlen(stringa
)));
anagramma
(stringa
, 0, strlen(stringa
));
return 0;
}
// ======================================================================================================
// Funzione per il calcolo del fattoriale di un numero (cioè il numero di permutazioni)
// ======================================================================================================
int fattoriale(int n) {
int i, valore=1;
if ( n<0 )
valore = 0;
else
for ( i=1 ; i<=n ; i++ )
valore = valore * i;
return valore;
}
// ======================================================================================================
// Funzione per l'elaborazione degli anagrammi/permutazioni della stringa (n lunghezza stringa)
// ======================================================================================================
void anagramma(char *string, int i, int n){
int j;
if(i==n){ // per la ricorsione la stringa da anagrammare
for(j=0; j<=n; j++) // si è ridotta ad un carattere
}
else
for(j=i; j<n; j++){
scambia_indici(string, i, j); // la funzione anagramma richiama se stessa escludendo
anagramma
(string
, i
+1, strlen(string
)); // ogni volta un elemento della stringa scambia_indici(string, i, j); // (l'anagramma di una stringa può essere considerato
} // come la combinazione opportuna degli anagrammi delle
} // sottostringhe che la compongono
// ======================================================================================================
// la funzione scambia_indici effettua lo scambio degli elementi di una stringa dati gli indici degli stessi
// ======================================================================================================
void scambia_indici(char *string, int i, int j)
{
char tmp;
tmp=string[i];
string[i]=string[j];
string[j]=tmp;
}
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFByb2dyYW1tYSBwZXIgaWwgY2FsY29sbyBkZWdsaSBhbmFncmFtbWkgZGkgdW5hIHBhcm9sYSBpbW1lc3NhCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2RlZmluZSBNQVggNTAgICAgICAgLy8gbGEgcGFyb2xhIHNhcsOgIGFsIG1hc3NpbW8gZGkgNTAgY2FyYXR0ZXJpCgppbnQgbWFpbigpewoKY2hhciBzdHJpbmdhW01BWF07CgpwcmludGYoIis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuIik7CnByaW50ZigifCAgICAgICAgICAgRUxBQk9SQVpJT05FIEFOQUdSQU1NQSAgICAgICAgICAgICB8XG4iKTsKcHJpbnRmKCIrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiIpOwpwcmludGYoIiAgICAJCQkJCQkJCQkgICAgICAgIFxuIik7CnByaW50ZigiICAgICBJbnNlcmlyZSB1bmEgcGFyb2xhIGUgcHJlbWVyZSBpbnZpbyAgICAgICAgXG4iKTsKCmdldHMoc3RyaW5nYSk7CgpwcmludGYoIkxlIHBvc3NpYmlsaSBjb21iaW5hemlvbmkgc29ubyAlZFxuXG5cYSIsIGZhdHRvcmlhbGUoc3RybGVuKHN0cmluZ2EpKSk7CgphbmFncmFtbWEoc3RyaW5nYSwgMCwgc3RybGVuKHN0cmluZ2EpKTsKCnJldHVybiAwOwp9CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gRnVuemlvbmUgcGVyIGlsIGNhbGNvbG8gZGVsIGZhdHRvcmlhbGUgZGkgdW4gbnVtZXJvIChjaW/DqCBpbCBudW1lcm8gZGkgcGVybXV0YXppb25pKQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaW50IGZhdHRvcmlhbGUoaW50IG4pIHsgCgogIGludCBpLCB2YWxvcmU9MTsgCQkKCiAgaWYgKCBuPDAgKSAKICAgIHZhbG9yZSA9IDA7IAkJCSAKICBlbHNlIAogICAgZm9yICggaT0xIDsgaTw9biA7IGkrKyApIAoJCXZhbG9yZSA9IHZhbG9yZSAqIGk7CQkgIAogIHJldHVybiB2YWxvcmU7IAp9CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gRnVuemlvbmUgcGVyIGwnZWxhYm9yYXppb25lIGRlZ2xpIGFuYWdyYW1taS9wZXJtdXRhemlvbmkgZGVsbGEgc3RyaW5nYSAobiBsdW5naGV6emEgc3RyaW5nYSkKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnZvaWQgYW5hZ3JhbW1hKGNoYXIgKnN0cmluZywgaW50IGksIGludCBuKXsKaW50IGo7CiAgICAKCWlmKGk9PW4peyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAvLyBwZXIgbGEgcmljb3JzaW9uZSBsYSBzdHJpbmdhIGRhIGFuYWdyYW1tYXJlIAoJCQlmb3Ioaj0wOyBqPD1uOyBqKyspICAgICAgICAgICAgICAgCQkgIC8vIHNpIMOoIHJpZG90dGEgYWQgdW4gY2FyYXR0ZXJlCgkJCXByaW50ZigiJWMiLHN0cmluZ1tqXSk7CgkJCXByaW50ZigiXG4iKTsKCQkJfQoJZWxzZQoJCWZvcihqPWk7IGo8bjsgaisrKXsKCQkgIAlzY2FtYmlhX2luZGljaShzdHJpbmcsIGksIGopOyAgICAgICAgICAgICAvLyBsYSBmdW56aW9uZSBhbmFncmFtbWEgcmljaGlhbWEgc2Ugc3Rlc3NhIGVzY2x1ZGVuZG8KCQkJYW5hZ3JhbW1hKHN0cmluZywgaSsxLCBzdHJsZW4oc3RyaW5nKSk7ICAgLy8gb2duaSB2b2x0YSB1biBlbGVtZW50byBkZWxsYSBzdHJpbmdhCgkJCXNjYW1iaWFfaW5kaWNpKHN0cmluZywgaSwgaik7ICAgICAgICAgICAgIC8vIChsJ2FuYWdyYW1tYSBkaSB1bmEgc3RyaW5nYSBwdcOyIGVzc2VyZSBjb25zaWRlcmF0bwoJCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21lIGxhIGNvbWJpbmF6aW9uZSBvcHBvcnR1bmEgZGVnbGkgYW5hZ3JhbW1pIGRlbGxlIAp9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb3R0b3N0cmluZ2hlIGNoZSBsYSBjb21wb25nb25vCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gbGEgZnVuemlvbmUgc2NhbWJpYV9pbmRpY2kgZWZmZXR0dWEgbG8gc2NhbWJpbyBkZWdsaSBlbGVtZW50aSBkaSB1bmEgc3RyaW5nYSBkYXRpIGdsaSBpbmRpY2kgZGVnbGkgc3Rlc3NpCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp2b2lkIHNjYW1iaWFfaW5kaWNpKGNoYXIgKnN0cmluZywgaW50IGksIGludCBqKQp7ICAgICAgICAgICAgICAgICAgICAgICAgCmNoYXIgdG1wOyAgICAgICAgICAgICAgICAgCnRtcD1zdHJpbmdbaV07CnN0cmluZ1tpXT1zdHJpbmdbal07CnN0cmluZ1tqXT10bXA7Cn0=