ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo026.c
Go to the documentation of this file.
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <time.h>
4
#include <math.h>
5
6
#define BIT(n) (1<<(n))
7
#define BIT_GET(x,n) ((x) & BIT(n))
8
#define BIT_SET(x,n) ((x) |= BIT(n))
9
#define BIT_CLEAR(x,n) ((x) &= ~BIT(n))
10
#define BIT_TOGGLE(x,n) ((x) ^= BIT(n))
11
#define BIT_WRITE(x,n,v) ((v)?BIT_SET(x,n):BIT_CLEAR(x,n))
12
#define ES_PAR(x) (!BIT_GET(x,0))
13
#define N 50
14
15
int
main
(
int
argc,
char
*argv[])
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
}
N
#define N
Definition
012_aleatorio.c:5
BIT_TOGGLE
#define BIT_TOGGLE(x, n)
Definition
Ejemplo026.c:10
BIT_WRITE
#define BIT_WRITE(x, n, v)
Definition
Ejemplo026.c:11
main
int main(void)
Definition
Ejemplo_035.c:15
src
20252
Ejemplo026.c
Generated by
1.16.1