/***************** ANAGRAMMI ****************** Programma per generare anagrammi Si assume che la parola da anagrammare contenga al massimo MAX caratteri */ #include #define MAX 30 // lunghezza massima di una stringa typedef unsigned long int bigInt; /* bigInt e' un nuovo tipo che e' sinonimo di 'unsigned long int' Per stampare il valore di una variabile n di tipo bigInt: printf("%lu",n); */ int strLength(char *w); void strCopy(char *t, char *s); void addChar(char *word, char *source, char c); void deleteChar(char *word, char *source, int k); /* Se il codice delle funzioni e' nel file string.c: - si genera il file oggetto string.o gcc -c string.c - si compilano insieme anagrammi.c e string.o gcc anagrammi.c string.o Ricordarsi di rinominare il main() di string.c */ void anagrammi(char *word); bigInt anagrammi1(char *word); int main(){ char word[MAX+1]; bigInt n=0; printf("parola da anagrammare ---> "); scanf("%s", word); anagrammi(word); printf("\nCon numerazione:\n\n"); n = anagrammi1(word); printf("\nNumero di anagrammi trovati: %lu\n",n); return 0; } /**** FUNZIONI PER GENERARE GLI ANAGRAMMI ***/ /* Stampa su linee distinte tutte le parole ottenute concatenando la stringa pref con gli anagrammi della stringa word */ void anagr(char *pref, char *word){ char used['z'-'a'+1]={0}; /* used[k] vale 1 se la k-esima lettera dell'alfabeto (k>=0) e' stata gia' usata per l'anagramma, 0 altrimenti */ } /* Funzione principale per stampare gli anagrammi di word */ void anagrammi(char *word){ // e' sufficiente una chiamata alla funzione anagr() } /*** VERSIONE CON NUMERAZIONE ***/ /* Stampa su linee distinte tutte le parole ottenute concatenando la stringa pref con gli anagrammi della stringa word numerandole. Si assume che siano state gia' scritte n parole. La funzione restituisce il numero di parole scritte. */ bigInt anagr1(char *pref, char *word, bigInt n){ return -1; } /* Funzione principale per stampare gli anagrammi di word con numerazione degli anagrammi. Restituisce il numero di anagrammi trovati */ bigInt anagrammi1(char *word){ // e' sufficiente una chiamata a anagr1() return -1; }