ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo026.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
Include dependency graph for Ejemplo026.c:

Go to the source code of this file.

Macros

#define BIT(n)
#define BIT_GET(x, n)
#define BIT_SET(x, n)
#define BIT_CLEAR(x, n)
#define BIT_TOGGLE(x, n)
#define BIT_WRITE(x, n, v)
#define ES_PAR(x)
#define N   50

Functions

int main (int argc, char *argv[])

Macro Definition Documentation

◆ BIT

#define BIT ( n)
Value:
(1<<(n))

Definition at line 6 of file Ejemplo026.c.

◆ BIT_CLEAR

#define BIT_CLEAR ( x,
n )
Value:
((x) &= ~BIT(n))
#define BIT(n)
Definition 026_Binarios.c:3

Definition at line 9 of file Ejemplo026.c.

◆ BIT_GET

#define BIT_GET ( x,
n )
Value:
((x) & BIT(n))

Definition at line 7 of file Ejemplo026.c.

◆ BIT_SET

#define BIT_SET ( x,
n )
Value:
((x) |= BIT(n))

Definition at line 8 of file Ejemplo026.c.

◆ BIT_TOGGLE

#define BIT_TOGGLE ( x,
n )
Value:
((x) ^= BIT(n))

Definition at line 10 of file Ejemplo026.c.

◆ BIT_WRITE

#define BIT_WRITE ( x,
n,
v )
Value:
((v)?BIT_SET(x,n):BIT_CLEAR(x,n))
#define BIT_CLEAR(x, n)
Definition 026_Binarios.c:6
#define BIT_SET(x, n)
Definition 026_Binarios.c:5

Definition at line 11 of file Ejemplo026.c.

◆ ES_PAR

#define ES_PAR ( x)
Value:
(!BIT_GET(x,0))
#define BIT_GET(x, n)
Definition 026_Binarios.c:4

Definition at line 12 of file Ejemplo026.c.

◆ N

#define N   50

Definition at line 13 of file Ejemplo026.c.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 15 of file Ejemplo026.c.

16{
17 char str[N], strP[N], strR[N], c, p, v;
18 int i, j, k, l, nc, cc, cb, np, p2, p2f, cc2, cb2;
19 srand(time(NULL));
20 i = 0;
21 do{
22 c = getchar();
23 str[i] = c;
24 i++;
25 }while(c!=10&&i<(N-1));
26 nc = i-1;
27 str[nc] = '\0';
28 np = (int)(log2(nc+log2(nc)+1)+1);
29 printf("NP = %d\n", np);
30 printf("%s (%d, %d)\n", str, nc, np);
31 for(i=0, j=0, p2=1; i<(nc+np); i++)
32 {
33 if((i+1)==p2)
34 {
35 strP[i] = 0;
36 p2<<=1;
37 }
38 else
39 {
40 c = str[j++];
41 strP[i] = c;
42 for(k=0, p2f=1; k<np; k++)
43 {
44 if(p2f&(i+1))
45 strP[p2f-1]^=c;
46 p2f<<=1;
47 }
48 }
49 }
50 strP[nc+np] = '\0';
51 cc = rand()%(nc+np);
52 cb = rand()%8;
53 BIT_TOGGLE(strP[cc],cb);
54 printf("%s\n", strP);
55 for(i=0, j=0, l=0, p2=1; i<(nc+np); i++)
56 {
57 if((i+1)==p2)
58 {
59 strR[nc+1+l] = strP[i];
60 l++;
61 p2 <<= 1;
62 }
63 else
64 {
65 c = strP[i];
66 strR[j++] = c;
67 for(k=0, p2f=1; k<np; k++)
68 {
69 if(p2f&(i+1))
70 strR[nc+1+k]^=c;
71 p2f<<=1;
72 }
73 }
74 }
75 strR[nc] = '\0';
76 strR[nc+np+1] = '\0';
77 printf("%s (%d, %d)\n", strR, cc, cb);
78 for(i=0, cc2=0; i<np; i++)
79 {
80 printf("%d\t", strR[nc+1+i]);
81 BIT_WRITE(cc2,i,strR[nc+1+i]);
82 if(strR[nc+1+i])
83 cb2 = log2(strR[nc+1+i]);
84 }
85 printf("(%d, %d)\n", cc2-1, cb2);
86 BIT_TOGGLE(strP[cc2-1],cb2);
87 printf("%s\n", strP);
88 return 0;
89}
#define N
#define BIT_TOGGLE(x, n)
Definition Ejemplo026.c:10
#define BIT_WRITE(x, n, v)
Definition Ejemplo026.c:11