Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
#include
#include
#include
#include
const int H=4,I=4,S=8,K=8,Y=4;
/*maciez generujaca*/
const int G[4][8]={
{1,0,0,1,1,0,0,1},
{0,1,0,1,0,1,0,1},
{0,0,1,1,0,0,1,1},
{0,0,0,1,0,0,0,1}};
/*maciez kontrolna transponowana*/
const int HT[8][4]={
{1,0,0,1},
{1,1,0,1},
{1,0,1,1},
{1,0,0,1},
{1,0,0,0},
{0,1,0,0},
{0,0,1,0},
{0,0,0,1}};
void winshadow(int x1,int y1,int x2,int y2,const color)/*wy~wietla okienko z cieniem w podanych punktach i z podanym kolorem t^a*/
{
int i;
window(x2+1,y1+1,x2+2,y2+1);
textbackground(BLACK);
clrscr();
window(x1+2,y2+1,x2+2,y2+1);
textbackground(BLACK);
clrscr();
window(x1,y1,x2,y2);
textbackground(color);
textcolor(BLACK);
clrscr();
for(i=0;i
gotoxy(2+i,1);
cprintf("");
}
for(i=0;i
gotoxy(2+i,y2-y1+1);
cprintf("");
}
for(i=0;i
gotoxy(2,1+i);
cprintf("");
}
for(i=0;i
gotoxy(x2-x1,1+i);
cprintf("");
}
gotoxy(2,1);
cprintf("");
gotoxy(x2-x1,1);
cprintf("");
gotoxy(2,y2-y1+1);
cprintf("");
gotoxy(x2-x1,y2-y1+1);
cprintf("");
window(x1+2,y1+1,x2-2,y2-1);
textbackground(color);
textcolor(BLACK);
clrscr();
}
char menu(void)
{
char z;
window(1,1,80,25);
textbackground(BLUE);
clrscr();
winshadow(10,6,70,15,CYAN);
gotoxy(17,2);
cprintf("Dekoder dla kodu (%2d,%2d)",K,I);
gotoxy(17,5);
textcolor(RED);
cprintf("Koder -> Enter");
gotoxy(17,6);
cprintf("Wyj~cie -> Esc");
/* _setcursortype(_NOCURSOR);*/
do{
z=getch();
}while(z!=27 && z!=13);
return(z);
}
void zeruj(int *string,int lenght)
{
int i;
for(i=0;i
}
void pobierz(int lenght,int *string,int posx,int posy) /*pobieranie ciagu z klawiatury*/
{ /*z echem na ekranie w okr. pozycji*/
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++;
}
}
}
void wypisz(int *string,int lenght,int x,int y) /* wypisywanie ciagu na ekranie w okr. pozycji*/
{
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;
winshadow(10,3,70,17,CYAN);
clrscr();
textcolor(BLACK);
cprintf("\n Podaj ciag informacyjny %2d znakow.\n\n\n\r",I);
cprintf(" Ciag informacyjny :");
pobierz(I,h,31,5);
zeruj(s,S);
for(j=0;j
for(i=0;i {
s[j]+=h[i]*G[i][j];
}
s[j]%=2;
}
gotoxy(11,6);
printf("Ciag kodowy : ");
wypisz(s,S,9,20);
gotoxy(11,9);
printf("Podaj maciez bledu %2d znakow : ",S);
zeruj(z,S);
pobierz(S,z,42,9);
for(i=0;i
winshadow(6,15,74,23,MAGENTA);
textcolor(WHITE);
clrscr();
gotoxy(15,2);
printf("Ciag odebrany : ");
wypisz(s1,S,15,15);
}
/*funkcja sprawdzajaca syndrom - zwraca zero jezeli jest zerowy*/
char spr_syn(void)
{
char i,j;
zeruj(y,Y);
for(j=0;j
for(i=0;i
y[j]+=s1[i]*HT[i][j];
}
y[j]%=2;
if(y[j]!=0) return(1);
}
return(0);
}
int test(void) /*poprawianie ciagu odebranego za pomoca testow ortogonalnych */
{
int i,j,k,wynik=0;
for(i=0;i<5;i++)
{
k=0;
for(j=0;j
k+=s1[j]*T[i][j];
}
k%=2;
wynik+=k;
}
return(wynik);
}
void przes_l(void)
{
int j,pom;
pom=s1[0];
for(j=0;j
s1[j]=s1[j+1];
}
s1[S-1]=pom;
}
void dekoder(void) /* dekoduje ciag kodowy*/
{
int i,err_count=0;
cprintf("\n\r Ciag odebrany skorygowany : ");
for(i=0;i
if(test()>2)
{
s1[0]=(s1[0]+1)%2;
err_count++;
textcolor(YELLOW);
}
gotoxy(10+i,17);
cprintf("%d",s1[0]);
textcolor(WHITE);
przes_l();
}
if(err_count>2) /*komunikat o prekroczonej zdolnosci korekcyjnej*/
{
gotoxy(5,23);
textcolor(YELLOW);
cprintf("\n\n\r Zdolnosc korekcyjna przekroczona, wykryto %d ",err_count);
switch(err_count)
{
case 0:;
case 5:;
case 6:;
case 7:;
case 8:;
case 9:cprintf("bledow.");break;
default:cprintf("bledy.");break;
}
textcolor(WHITE);
}
if(spr_syn()!=0)
{
gotoxy(15,24);
textcolor(YELLOW+128);
cprintf("\n\n\r Syndrom rozny od '0' ciag nie jest ciagiem kodowym.");
textcolor(WHITE);
}
getch();
}
void main(void)
{
char z;
do
{
switch(z=menu())
{
case 13:{koder();dekoder();}break;
case 27:break;
default: break;
}
}
while(z!=27);
}