PDA

Visualizza la versione completa : [C] Stampare le tutte le possibili combinazioni di n bit


pietroA
16-02-2011, 12:36
salve, sto cominciando ad avvicinarmi al C per motivi di studio e dovrei risolvere il seguente esercizio: scrivere una funzione che stampi tutte le possibile combinazioni di n bit, dove il valore di n(<16) dovrà essere passato come argomento della funzione. (non so come procedere)



float combinazioni (int n) /*definisco la funzione, è corretto farle ritornare un tipo float? */
{
int i;
float comb;

/*da questo punto in poi non so come fare ad indicare che il numero n rappresenta il numero di bit da
stampare e da modificare in tutte le combinazioni qualcuno mi saprebbe suggerire come procedere??*/

}

return comb;



non ho la minima idea di come fare, cioè so che dovrei utilizzare dei cicli for e che uno di questi dovrebbe avere al suo interno un printf che mi stampi ad ogni giro del ciclo la combinazioni di bit, ma, appunto non so come far fare per indicare che n è il numero di bit e che essi devono essere stampati in tutte le sue possibili combinazioni

MItaly
16-02-2011, 13:06
Tutte le combinazioni di N bit corrispondono a tutti i numeri da 0 a 2^N-1 espressi in binario. Se ti scrivi una funzione per scrivere un numero in binario il tutto si riduce ad un for da 0 a 2^N-1 richiamando la funzione in questione.

Alex'87
16-02-2011, 13:30
Originariamente inviato da pietroA
[code]
float combinazioni (int n) /*definisco la funzione, è corretto farle ritornare un tipo float? */ Hai detto che la tua funzione deve solo stampare le combinazioni... Se ci ragioni un attimo capirai che far restituire qualcosa a questa funzione non ha senso.

pietroA
16-02-2011, 14:25
@MItaly, si lo so che tutte le combinazioni degli n bit corrispondono a tutti i numeri fra 0 e 2^(n-1), la parte difficile è come stampare i numeri in binario??

@Alex'87, hai ragione ho scritto una porcata, non ho riflettuto sul fatto che devo solo stampare e non aspettarmi nulla ritornato, quindi la funzione deve ritornare un void!! grazie per avermelo fatto notare!

MItaly
16-02-2011, 14:40
Originariamente inviato da pietroA
@MItaly, si lo so che tutte le combinazioni degli n bit corrispondono a tutti i numeri fra 0 e 2^(n-1), la parte difficile è come stampare i numeri in binario??
Conosci gli operatori bitwise (& e <<, in particolare)?

linoma
16-02-2011, 16:38
te lo scirvo io il codice va :)



unsigned long l;

l=0;
do{
printf("%08X\n",l)
l++;
}while(l != 0);


vale solo x 32 bits

pietroA
16-02-2011, 18:05
grazie linoma!!! scusa se ti faccio un altra domanda, è possibile modificare il codice che mi hai dato tu e farlo in modo che il numero di bits si determinato da un n passato come argomento dove n deve essere <16??

linoma
16-02-2011, 18:07
Certo ma dovrebbe essere un tuo esercizio. :ciauz:

pietroA
20-02-2011, 18:04
salve gente volevo fare un programmino per stampare tutte le occorrenze di n bit usando la funzione itoa(che data una base trasforma una stringa nel suo corrispettivo in quella base) ora io avevo buttato giu il seguente codice, ma sono per certo ci siano degli errori, ma il compilatore nn me li segnala, il programmino parte e dopo aver acquisito n e premuto invio, l esecuzione si blocca... ecco il codice, protesti suggerirmi dove sbaglio??




#include <stdlib.h>
#include <stdio.h>

char * itoa ( int value, char * str, int base );

int main()
{
char*str;
int base, value, i, n;
i=2^n;
base=2;
scanf("%i", &n);

for(value=0; value<i; value++)
{
itoa (value, str, base);
printf("%d\n", str);
}
return 0;
system ("pause");
}


grazie per i suggerimenti!!!

Alex'87
20-02-2011, 18:14
Inizializza str, or ora contiene solo fuffa.


Originariamente inviato da pietroA
salve gente volevo fare un programmino per stampare tutte le occorrenze di n bit usando la funzione itoa(che data una base trasforma una stringa nel suo corrispettivo in quella base) ora io avevo buttato giu il seguente codice, ma sono per certo ci siano degli errori, ma il compilatore nn me li segnala, Il compilatore segnala errori sintattici, non quelli di "logica" del programma.

Comunque a me il gcc segnala un warning:



test.c: In function ‘main’:
test.c:18: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘char *’
Undefined symbols:
"_itoa", referenced from:
_main in cci2M1sk.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Loading