Ciao a tutti.
Ho controllato nel forum, ma non ho trovato nessun riferimento ad un esercizio di questa tipologia.
Probabilmente il quesito che sto per proporvi, per molti di voi, sarà una passeggiata ma io non so proprio da che parte girarmi.
Riporto il testo:
Quesito 5
Scrivere un programma che chiede all’utente un numero intero n positivo e poi visualizza tutte le combinazioni di lunghezza n costituite da sequenze di simboli ’+’ e ’-’. L’ordine delle combinazioni `e a piacere.
Esempio 1
Ingresso: 3
Uscita: +++ ++- +-+ +-- -++ -+- --+ ---
Esempio 2
Ingresso: 2
Uscita: ++ +- -+ --
Io ho pensato di allocare dinamicamente la memoria e man mano di aggiungere in coda le combinazioni di '+' e '-' .
codice:
#include <stdio.h>
#define N 2
typedef struct _elem {
char symbol;
struct _elem *next;
} elem;
elem *inserisciCoda (elem *testa, char car);
int main (int argc, char * argv[])
{
int n;
char car;
int totdisp = 1, cont = 0, ctrl;
elem *lista = NULL;
elem *tmp;
printf ("\n\nLunghezza della disposizione con ripetizione costituita da '+' e '-': ");
do
scanf ("%d", &n);
while (n <= 0);
while (cont < n)
{
totdisp = N * totdisp;
cont ++;
}
printf ("\nNumero di combinazioni possibili: %d", totdisp);
for (ctrl = 0; ctrl < totdisp; ctrl ++)
{
if (lista == NULL)
{
cont = 0;
while (cont < n)
{
car = '+';
lista = inserisciCoda(lista, car);
cont ++;
}
car = ' ';
lista = inserisciCoda(lista, car);
}
else
{
// Non riesco a capire come posso aggiungere alla lista
// le combinazioni di '+' e '-' controllando ad ogni ciclo
// se la determinata combinazione è già presente oppure no.
}
}
printf ("\n\nCombinazioni\n");
for (tmp = lista; tmp != NULL; tmp = tmp->next)
printf ("%c", car);
printf ("\n\n");
return 0;
}
elem *inserisciCoda (elem *testa, char car)
{
elem *tmp, *new;
if (new = (elem *)malloc(sizeof(elem)))
{
new->symbol = car;
new->next = NULL;
if (testa == NULL)
testa = new;
else
{
for (tmp = testa; tmp->next != NULL; tmp = tmp->next);
tmp->next = new;
}
}
else
printf ("\nERRORE: memoria non allocata per il nuovo elemento.\n");
return testa;
}
Spero di essere stato chiaro nell'esporre il mio problema. Grazie in anticipo.