Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
#include
#include
#include
#include
const int H=4,S=10,Y=6;
int h[4],s[10],s1[10],so[10],y[6],z[10];
/*maciez generujaca*/
const int G[4][10]={
{1,0,0,0,1,1,0,0,0,1},
{0,1,0,0,1,0,1,0,0,1},
{0,0,1,0,1,0,0,1,0,1},
{0,0,0,1,1,0,0,0,1,1}};
/*maciez kontrolna transponowana*/
const int HT[10][6]={
{1,1,0,0,0,1},
{1,0,1,0,0,1},
{1,0,0,1,0,1},
{1,0,0,0,1,1},
{1,0,0,0,0,0},
{0,1,0,0,0,0},
{0,0,1,0,0,0},
{0,0,0,1,0,0},
{0,0,0,0,1,0},
{0,0,0,0,0,1}};
char menu(void)
{
char z;
clrscr();
printf("\n\tDekoder dla kodu (%2d,%2d)\n\tEnter koder\
\n\tEsc koniec",S,H);
z=getche();
return(z);
}
void zeruj(int *string,int lenght)
{
int i;
for(i=0;i
}
/*pobieranie ciagu z klawiatury z echem na ekranie w okr. pozycji*/
void pobierz(int lenght,int *string,int posx,int posy)
{
int i;
for(i=0;i
fflush(stdin);
string[i]=getch()-'0';
if((string[i]==1)||(string[i]==0))
{
gotoxy(posx+i,posy);
printf("%d",string[i]);
i++;
}
}
}
/* wypisywanie ciagu na ekranie w okr. pozycji*/
void wypisz(int *string,int lenght,int x,int y)
{
int i;
for(i=0;i
gotoxy(x+i,y);
printf("%d",string[i]);
}
}
void koder(void) /*kodowanie ciagu informacyjnego h -> s */
{
int i,j;
clrscr();
printf("\n podaj ciag informacyjny %2d znakow ",H);
gotoxy(10,4);
printf("ciag informacyjny");
pobierz(H,h,10,5);
zeruj(s,S);
for(j=0;j
for(i=0;i
s[j]+=h[i]*G[i][j];
}
s[j]%=2;
}
gotoxy(10,6);
printf("ciag kodowy");
wypisz(s,S,10,7);
gotoxy(10,8);
printf("podaj maciez bledu %2d znakow",S);
zeruj(z,S);
pobierz(S,z,10,9);
for(i=0;i
gotoxy(10,10);
printf("ciag odebrany");
wypisz(s1,S,10,11);
}
int test(void) /*waga syndromu */
{
int i,wynik=0;
for(i=0;i<6;i++)
{
wynik+=y[i];
}
return(wynik);
}
void przes_l(void)
{
int j,pom;
pom=so[0];
for(j=0;j
so[j]=so[j+1];
}
so[S-1]=pom;
}
void przes_p(void)
{
int j,pom;
pom=s1[9];
for(j=9;j>0;j--)
{
s1[j]=s1[j-1];
}
s1[0]=pom;
}
void dekoder(void) /* dekoduje ciag kodowy*/
{
int i,j,x,k=0,e=0,d=0;
gotoxy(10,12);
zeruj(so,S);
do
{
zeruj(y,Y);
for(j=0;j<6;j++)
{
for(i=0;i<10;i++)
{
y[j]+=s1[i]*HT[i][j];
}
y[j]%=2;
}
x=test();
switch(x) /* 1 */
{
case 0:
{
for(i=0;i<10;i++)
{
so[i]=s1[i];
so[i]%=2;
}
break;
}
case 1:
{
for(i=0;i<10;i++)
{
if(i<4)
so[i]=s1[i];
else
so[i]=s1[i]+y[i-4];
so[i]%=2;
}
break;
}
default:
{
zeruj(y,Y);
przes_p();
e++;
break;
}
}
}
while((x!=1)&&(x!=0)&&(e<11));
if((e!=0)&&(e<10))
{
for(i=0;i
przes_l();
}
printf("ciag odebrany skorygowany");
}
if(e==0)
{
printf("ciag odebrany skorygowany");
}
if(e==11)
{
for(i=0;i<10;i++)
{
d+=z[i];
}
printf("zdolno˜† korekcyjna przekroczona,wykryto bˆ©d¢w %d\n",d);
printf("\t ci¡g bˆ©dnie skorygowany");
for(i=0;i<10;i++)
{
if(i<4)
so[i]=s1[i];
else
so[i]=s1[i]+y[i-4];
so[i]%=2;
}
}
wypisz(so,S,10,14+k);
getch();
}
void main(void)
{
char z;
do
{
switch(z=menu())
{
case 13:{koder();dekoder();}break;
case 27:break;
default: break;
}
}
while(z!=27);
}