목차
없음
본문내용
0만 입력해서 바로 찾아가서 실행을 하게 됩니다.
4.설계
5.구현(프로그램)
#include
void generate(); //generate 변수선언
void test(); //test변수 선언
int main() //메인함수
{
int select = 0; //select라는 변수선언, 초기화
while ( 1 ) //while문()메뉴선택
{
fflush(stdin); //버퍼지워주는 함수
printf("4bit Hamming Code Generate & Test\n"); //출력
printf("당신이 원하는 것을 고르시오?\n"); //출력
printf("1. Generate\n"); //선택목록 출력
printf("2. Test\n"); //선택목록 출력
printf("3. Exit\n"); //선택목록 출력
scanf("%d", &select); //선택한 번호 %d에...
switch(select) //select 조건파악한 후
{
case (1): //1이면 generate
generate();
break;
case (2): //2이면 test
test();
break;
case (3): //3이면 exit
return 0;
default: //잘못된 입력시...
printf("잘못된 입력입니다!!\n"); //출력
break;
} // switch
} // while
}
void generate()
{
int mm[4], pp[3]; // material, parity
int i;
printf("Input 4 bit data.\n"); //출력
for ( i = 0 ; i < 4 ; i++ ) //for문()
{
fflush(stdin);
scanf("%d", &mm[i]); //4비트 입력받기
if ( mm[i] != 0 && mm[i] != 1 )
{
printf("You can enter only 0 and 1!!\n\n");
i--;
} //if
} // for
pp[0] = (mm[0]+mm[1]+mm[3])%2; //0,1,3번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트0번에 입력
pp[1] = (mm[0]+mm[2]+mm[3])%2; //0,2,3번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트1번에 입력
pp[2] = (mm[1]+mm[2]+mm[3])%2; //1,2,3번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트2번에 입력
printf("Your code %d %d %d %d\n", mm[0], mm[1], mm[2], mm[3]);
printf(" became %d %d %d %d %d %d %d\n", pp[0], pp[1], mm[0], pp[2], mm[1], mm[2], mm[3]);
printf(" by Hamming Code\n\n");
}
void test()
{
int cc[7], ch[3], err; //code, check
int i;
printf("Input your 7 bit Hamming code.\n");
for ( i = 0 ; i < 7 ; i++ ) //for문(초기문;조건문 i < 7;증가문)
{
fflush(stdin);
scanf("%d", &cc[i]);
if ( cc[i] != 0 && cc[i] != 1 )
{
printf("You can enter only 0 and 1!!\n");;
i--;
} //if
} // for
ch[0] = (cc[0]+cc[2]+cc[4]+cc[6])%2; //0,2,4,6번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트0번에 입력
ch[1] = (cc[1]+cc[2]+cc[5]+cc[6])%2; //1,2,5,6번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트1번에 입력
ch[2] = (cc[3]+cc[4]+cc[5]+cc[6])%2; //3,4,5,6번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트2번에 입력
if ( (err = ch[0] + ch[1]*2 + ch[2]*4 - 1) == -1)
{
printf("There's no error.\n");
printf("And the data is %d %d %d %d.\n\n", cc[2], cc[4], cc[5], cc[6]);
return;
}
if( cc[err] == 0 )
cc[err] = 1;
else
cc[err] = 0;
printf("There was an error. It was corrected to ");
printf("%d %d %d %d %d %d %d.\n", cc[0], cc[1], cc[2], cc[3], cc[4], cc[5], cc[6]);
printf("And the data is %d %d %d %d\n\n", cc[2], cc[4], cc[5], cc[6]);
}
6.결과
< 첫 번째 결과 >
< 두 번째 결과 >
7.결과에 대한 해석
- 첫 번째 그림 결과 해석 : 첫 번째 결과물은 임의의 비트(=1010)을 입력 하였을 때 해밍코드 부호화 하여(=짝수 페리티) 다음과 같은 비트 (=1011010) 을 얻을 수 있습니다.
비트 순서
1(20)
2(21)
3
4(22)
5
6
7
패리티 비트의 위치
1(P1)
0(P2)
1(P3)
정보비트의 위치
1(M1)
0(M2)
1(M3)
0(M4)
부호화된 비트
1
0
1
1
0
1
0
- 두 번째 그림 결과 해석 : 두 번째 결과물은 위의 첫 번째 그림의 결과가 일치하는지를 확인해 주는 일종의 검산에 관한 과정입니다. 해밍코드로 부호화된 7비트1011010 (=첫번째 결과물과 같은 비트)을 입력 시, 코드의 오류 유무와 해밍코드에 의해 부호화된 정보비트를 추출하여 출력하게 되며, 결과를 통해 첫 번째 그림과 해밍코드와 정보비트가 일치함을 알 수 있습니다.
(원래 저희 조가 하려던 인터럽트 처리과정은 저희가 각고에 노력을 해보았지만 현재의 프로그래밍 실력으론 많이 부족하여 결국 구현하지 못했습니다. 그래서 제출일이 다가와 피치 못하게 주제를 변경하게 되었습니다. 죄송합니다. 방학동안 프로그래밍 공부에 더욱 신경써서 공부하겠습니다. )
4.설계
5.구현(프로그램)
#include
void generate(); //generate 변수선언
void test(); //test변수 선언
int main() //메인함수
{
int select = 0; //select라는 변수선언, 초기화
while ( 1 ) //while문()메뉴선택
{
fflush(stdin); //버퍼지워주는 함수
printf("4bit Hamming Code Generate & Test\n"); //출력
printf("당신이 원하는 것을 고르시오?\n"); //출력
printf("1. Generate\n"); //선택목록 출력
printf("2. Test\n"); //선택목록 출력
printf("3. Exit\n"); //선택목록 출력
scanf("%d", &select); //선택한 번호 %d에...
switch(select) //select 조건파악한 후
{
case (1): //1이면 generate
generate();
break;
case (2): //2이면 test
test();
break;
case (3): //3이면 exit
return 0;
default: //잘못된 입력시...
printf("잘못된 입력입니다!!\n"); //출력
break;
} // switch
} // while
}
void generate()
{
int mm[4], pp[3]; // material, parity
int i;
printf("Input 4 bit data.\n"); //출력
for ( i = 0 ; i < 4 ; i++ ) //for문()
{
fflush(stdin);
scanf("%d", &mm[i]); //4비트 입력받기
if ( mm[i] != 0 && mm[i] != 1 )
{
printf("You can enter only 0 and 1!!\n\n");
i--;
} //if
} // for
pp[0] = (mm[0]+mm[1]+mm[3])%2; //0,1,3번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트0번에 입력
pp[1] = (mm[0]+mm[2]+mm[3])%2; //0,2,3번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트1번에 입력
pp[2] = (mm[1]+mm[2]+mm[3])%2; //1,2,3번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트2번에 입력
printf("Your code %d %d %d %d\n", mm[0], mm[1], mm[2], mm[3]);
printf(" became %d %d %d %d %d %d %d\n", pp[0], pp[1], mm[0], pp[2], mm[1], mm[2], mm[3]);
printf(" by Hamming Code\n\n");
}
void test()
{
int cc[7], ch[3], err; //code, check
int i;
printf("Input your 7 bit Hamming code.\n");
for ( i = 0 ; i < 7 ; i++ ) //for문(초기문;조건문 i < 7;증가문)
{
fflush(stdin);
scanf("%d", &cc[i]);
if ( cc[i] != 0 && cc[i] != 1 )
{
printf("You can enter only 0 and 1!!\n");;
i--;
} //if
} // for
ch[0] = (cc[0]+cc[2]+cc[4]+cc[6])%2; //0,2,4,6번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트0번에 입력
ch[1] = (cc[1]+cc[2]+cc[5]+cc[6])%2; //1,2,5,6번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트1번에 입력
ch[2] = (cc[3]+cc[4]+cc[5]+cc[6])%2; //3,4,5,6번째 비트를 짝수로 만들어주기위해 더해서 나머지를 패리트2번에 입력
if ( (err = ch[0] + ch[1]*2 + ch[2]*4 - 1) == -1)
{
printf("There's no error.\n");
printf("And the data is %d %d %d %d.\n\n", cc[2], cc[4], cc[5], cc[6]);
return;
}
if( cc[err] == 0 )
cc[err] = 1;
else
cc[err] = 0;
printf("There was an error. It was corrected to ");
printf("%d %d %d %d %d %d %d.\n", cc[0], cc[1], cc[2], cc[3], cc[4], cc[5], cc[6]);
printf("And the data is %d %d %d %d\n\n", cc[2], cc[4], cc[5], cc[6]);
}
6.결과
< 첫 번째 결과 >
< 두 번째 결과 >
7.결과에 대한 해석
- 첫 번째 그림 결과 해석 : 첫 번째 결과물은 임의의 비트(=1010)을 입력 하였을 때 해밍코드 부호화 하여(=짝수 페리티) 다음과 같은 비트 (=1011010) 을 얻을 수 있습니다.
비트 순서
1(20)
2(21)
3
4(22)
5
6
7
패리티 비트의 위치
1(P1)
0(P2)
1(P3)
정보비트의 위치
1(M1)
0(M2)
1(M3)
0(M4)
부호화된 비트
1
0
1
1
0
1
0
- 두 번째 그림 결과 해석 : 두 번째 결과물은 위의 첫 번째 그림의 결과가 일치하는지를 확인해 주는 일종의 검산에 관한 과정입니다. 해밍코드로 부호화된 7비트1011010 (=첫번째 결과물과 같은 비트)을 입력 시, 코드의 오류 유무와 해밍코드에 의해 부호화된 정보비트를 추출하여 출력하게 되며, 결과를 통해 첫 번째 그림과 해밍코드와 정보비트가 일치함을 알 수 있습니다.
(원래 저희 조가 하려던 인터럽트 처리과정은 저희가 각고에 노력을 해보았지만 현재의 프로그래밍 실력으론 많이 부족하여 결국 구현하지 못했습니다. 그래서 제출일이 다가와 피치 못하게 주제를 변경하게 되었습니다. 죄송합니다. 방학동안 프로그래밍 공부에 더욱 신경써서 공부하겠습니다. )
추천자료
패션브랜드속 문화마케팅
C++과 API로 구현한 지뢰찾기
[리눅스][운영체제][운영체계][OS][리눅스 기능][리눅스와 윈도우즈의 차이점]리눅스의 탄생...
[소프트웨어][소프트웨어개발][소프트웨어개발모형][프로그램]소프트웨어의 특성과 소프트웨...
기획천재가 된 홍대리 A+ 서평
게임 사운드 라이브러리
한스 피터 룬(Hans Peter Luhn) & 텍소노미(Taxonomy)/ 폭소노미(Folksonomy) (브라우징(...
MFC 명함관리 프로그램
Strain rate와 최대화염온도와의 관계 실험
Quartus II 사용법 및 Verilog HDL 4bit adder - Verilog HDL을 이용한 가산기 설계 : Verilo...
공개소프트웨어(Hadoop_하둡)
패션상품유통론 - 펀토리(Funtory)
텀프로젝트 결과레포트 창문 방범 시스템
소개글