C/Visual C - cadenas

 
Vista:
sin imagen de perfil

cadenas

Publicado por Daniel (3 intervenciones) el 01/03/2017 04:17:07
Que tal tengo este codigo el cual muestra todo el numero de combinaciones que se pueden hacer con cero y uno pero segun el numero al que este elevado sigma que vale dos por los dos elementos cero y uno .
De este programa debo sacar todo el universo, es decir todas las cadenas que se pueden con 2, luego todas que se pueden hacer con 3, con cuatro y asi sucesivamente alguien me podria ayudar a como hacerla.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
 
void llenarAlfa(char alfa[]){
 
	printf("\n***LLenando el alfabeto**");
	for(int i=0;i<2;i++){
		getchar();
		printf("\nElemento [%d]: ",i+1);
		scanf("%c",&alfa[i]);
	}
}
 
 
int exponente(){
	int n;
	printf("\nExponente: ");
	scanf("%d",&n);
	return n;
}
 
void magia(int tam,int num,char alfa[],FILE *file){
	int n=num,i=0,l=0;
	int matriz[tam][num];
	printf("\n");
	fprintf(file, "----------------\n");
	for(int cont=0;cont<num;cont++){
		for(l=0;l<tam;l++){
 
			if(i<pow(2,n-1)){
				matriz[cont][l]=alfa[0];
			}
 
 
			if(i>=pow(2,n-1)){
				matriz[cont][l]=alfa[1];
			}
			printf("%c ",matriz[cont][l]);
			fprintf(file, "%c",matriz[cont][l]);
			i++;
			if(i==pow(2,n))
				i=0;
		}
		i=0;
		n--;
		printf("\n");
		fprintf(file,"\n");
 
	}
}
 
char empezar(char op){
	int i=0;
	printf("\nDeceas volver a intentarlo?\n\t (S)i (N)o\n");
	getchar();
	scanf("%c",&op);
	op=tolower(op);
	if(op=='s' || op=='n')
		return op;
	else printf("\nLa opcion que introduciste no es valida");
}
 
int main(){
	FILE *file;
	file=fopen("text.txt","w");
	int n,num,tam,i,l=0;
	char alfa[2],op='s';
	while(op=='s'){
		num=exponente();
		tam=pow(2,num);
		llenarAlfa(alfa);
		magia(tam,num,alfa,file);
		op=empezar(op);
 
	}
	fclose(file);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

cadenas

Publicado por Chema (234 intervenciones) el 01/03/2017 12:23:25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
/*Que tal tengo este codigo el cual muestra todo el numero de 
*combinaciones que se pueden hacer con cero y uno */
unsigned int Cmb(unsigned int n){
	int result = 1;
	while (n >>= 1)
		result++;
 
	return result;
}
/*
*pero segun el numero al que este elevado sigma que vale dos por
* los dos elementos cero y uno .
*/
void Sigma(){
/*No entiendo el enunciado, por lo tanto no se que realizar*/
}
 
/*De este programa debo sacar todo el universo, 
*es decir todas las cadenas que se pueden con 2, 
*luego todas que se pueden hacer con 3, con cuatro y asi sucesivamente
*/
void Universe(unsigned int v, unsigned int result){
	/*se suma la conbinacion 0*/
	v+= 1;
	printf("Numero ceros y uno := %u  "
	"combinaciones := %u\n",result, v);
}
int main(void){
	unsigned int v;
	unsigned int result = 0;
 
	v = 0xFFFFFFFF;
	while (v >>= 1){
		result = Cmb(v);
		Universe(v,result);
	}
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

cadenas

Publicado por Daniel Aguilar (3 intervenciones) el 01/03/2017 13:09:01
Si mira, sigma es igual a dos ya que solo hay dos elementos que son el cero y el uno el programa pide que el usuario ingrese una potencia a la cual se va a elevar sigma ejemplo el usuario ingresa 2 entonces 2^2 es cuanto esto quiere decir que se harán 4 combinaciones diferentes solo de dos dígitos, si el usuario ingresa 3 se harán 2^3=8, 8 combinaciones de 3 dígitos, eso es lo que resuelve el programa que subí yo.
Ahora con este mismo debo hacer que el programa muestre las combinaciones de dos dígitos, de 3, de cuatro, de cinco y así sucesivamente ejemplo
Dos ={00,01,11,10},tres{000,001,010,100,111,110,101,111} y así sucesivamente.
Quedó más claro?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

cadenas

Publicado por Chema (234 intervenciones) el 01/03/2017 18:53:57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
 
/*Que tal tengo este codigo el cual muestra todo el numero de 
*combinaciones que se pueden hacer con cero y uno */
unsigned int Cmb(unsigned int n){
	int result = 1;
	while (n >>= 1)
		result++;
 
	return result;
}
/*
*pero segun el numero al que este elevado sigma que vale dos por
* los dos elementos cero y uno .
*/
/*Sigma ejemplo el usuario ingresa 2 entonces 2^2 es 
*cuanto esto quiere decir que se harán 4 combinaciones
* diferentes solo de dos dígitos, si el usuario ingresa 3 se harán 2^3=8,
*/
void Sigma(){
}
/*
*Ahora con este mismo debo hacer que el programa muestre las 
*combinaciones de dos dígitos, de 3, de cuatro, de cinco y así 
*/
void PrintDigitConb(unsigned int n, unsigned int ndigit){
	int i = 0;
 
	do{
	 printf("%d", (n & 1));
	 i++;
	 if(i % ndigit == 0)
		printf("-");
	}while (n >>= 1);
 
 
}
 
/*De este programa debo sacar todo el universo, 
*es decir todas las cadenas que se pueden con 2, 
*luego todas que se pueden hacer con 3, con cuatro y asi sucesivamente
*/
void Universe(unsigned int v, unsigned int result){
	/*se suma la conbinacion 0*/
	v+= 1;
	printf("N := %u  "
	"c := %u",result, v);
}
 
int main(void){
	unsigned int v;
	unsigned int result = 0;
 
	v = 0x0000FFFF;
	while (v >>= 1){
		result = Cmb(v);
		Universe(v,result);
		printf("\n");
		PrintDigitConb(v,2);
		printf("\n----\n");
	}
 
 
/*aqui se acaba la magia*/
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

cadenas

Publicado por Chema (234 intervenciones) el 02/03/2017 11:26:34
Ayer se me paso por alto completar la función sigma:

1
2
3
4
5
6
7
8
9
10
11
12
13
/*Sigma ejemplo el usuario ingresa 2 entonces 2^2 es 
*cuanto esto quiere decir que se harán 4 combinaciones
* diferentes solo de dos dígitos, si el usuario ingresa 3 se harán 2^3=8,
*/
unsigned int Sigma( int log){
	unsigned int v = 0;
	/*Si hablamos de potencias de 2, se puede sustituir la funcion 
	*pow() por 
	*/
	v = (1 << log );
	//~ printf(" %u  = %u   \n",pow(2,log),v);
	return v;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar