Oppure

Loading
31/03/09 7:07
daniele_
Ciao a tutti! Allora dovrei fare una cosa del genere:

111111
111112
111113
111121
111123
111131
......
333333

in realtà è un singolo array (in questo caso di dimensione 6) che varia dopo aver effettuato un controllo.
I numeri sono prelevati da un altro array.
Ho provato con un paio di for e while ma non sono arrivato ad una soluzione
      for(j=0;j<mon;j++){
      while(dim>0){
      for(i=0;i<dim;i++){
                         bin[i]=vet[j];
                         printf("%d",bin[i]);
                         }
                         dim--;
                         printf("\n");
                         }
                         dim=dim2;
                         }


c'è una soluzione più semplice?
grazie ;)
aaa
31/03/09 12:16
gigisoft
Postato originariamente da daniele_:

Ciao a tutti! Allora dovrei fare una cosa del genere:

111111
111112
111113
111121
111123
111131
......
333333

in realtà è un singolo array (in questo caso di dimensione 6) che varia dopo aver effettuato un controllo.
I numeri sono prelevati da un altro array.



Non ho compreso molto il tuo codice, ma penso di aver compreso il problema, io lo risolverei così:

int dim = 6, mon = ...;
int bin[dim], vet[mon], i, j, k;

[...]
// avvaloramento  di vet[]
[...]

for (i = 0; i < dim; i++)
  bin[i] = vet[0];

do {
	i = dim - 1;
	
	while ((bin[i] == vet[mon - 1]) && (i >= 0)) { i-- }
	
	if (i >= 0)
	   {
	   	for (j = i + 1; j < dim; j++)
	   	    { bin[j] := vet[0] }
	   	    
	   	k = 0;
        while (bin[i] != vet[k]) { k++ }	   	

	   	bin[i] = vet[k + 1];
	   }

} while (i < 0);


grazie ;)


Di niente.

Ciao. :k:
aaa
31/03/09 13:21
daniele_
ok ti ringrazio! Solo che non va...però probabilmente perchè non ho capito due punti.

Allora il primo è: dove finisce il primo for? Prima del do o dopo il while?

E poi l'altro è: bin[j] := vet[0]. I due punti sono errori di battitura?
aaa
31/03/09 14:43
gioser
io mi sono divertito con un po' di ricorsione
non so se risponde al requisito, ma magari ti puo' essere utile come traccia... :)

#include <stdio.h>
#include <malloc.h>

const int minimo = 1;
const int massimo = 3;

void gencont(int ncifre, int index, char * buf)
{
    int i;
    char *p = buf + index;

    for (i = minimo; i <= massimo; ++i)
    {
        *p = i + '0';
        if (index + 1 < ncifre)
            gencont(ncifre, index + 1, buf);
        else
            puts(buf);
    }
}

int main()
{
    int cifre;
    char * buf;

    printf("quante cifre: ");
    scanf("%d", &cifre);
    if (cifre < 1 || cifre > 100)
    {
        puts("errore parametro");
        getchar();
    }

    buf = malloc(cifre + 1);
    memset(buf, 0, cifre + 1);

    gencont(cifre, 0, buf);

    free(buf);

    getchar();
    return 0;
}
aaa
31/03/09 14:46
gigisoft
Postato originariamente da daniele_:

ok ti ringrazio! Solo che non va...però probabilmente perchè non ho capito due punti.

Allora il primo è: dove finisce il primo for? Prima del do o dopo il while?

E poi l'altro è: bin[j] := vet[0]. I due punti sono errori di battitura?


ooops! Scusa.

E' che sono abituato a usare il Delphi :rotfl:

Comunque il primo for contiene solo un'istruzione e l'altro era:


bin[j] = vet[0]



Ciao.
Ultima modifica effettuata da gigisoft 31/03/09 16:41
aaa
01/04/09 15:40
daniele_
ok grandi ragazzi! Ho risolto!

Grazie! :k:
aaa